发布网友 发布时间:2022-04-21 14:50
共1个回答
热心网友 时间:2023-07-21 22:41
语言规定,switch的引数必须是整型,或者字元。你定义的score是float型别,所以不加int强制转换会报错
你好! 一步一步来 int a,b; 这句的功能是作业系统为 变数a,b分别分配一块空闲的储存空间 以后使用a,b将相当于访问各自所对应的 储存空间 a = 0000;b = Ox1234; 这句的功能是 把0000放到变数a所对应的储存空间 把0x1234放到变数b所对应的储存空间 重点是下面这句a = (char)(b) 它的功能相当于修改变数a的值, 具体是这样操作的,从b所对应的储存空间中取出 b的值即0x1234,然后把他转换成char型别,再然后将 转换后的结果放到变数a所对应的储存空间,即覆盖掉 原来的0000 这个转换后的结果又是多少呢,是这样算的 通常在C中int型别占4个位元组 而char型别占1个位元组 如果把一个int型别的资料以char型别输出,那么,编译器 会自动丢弃int型别的前3个位元组的内容 对应本题 int型别的资料b是0X1234 为十六进位制 在计算机中是这样储存的 0000 0000 0000 0000 0001 0010 0011 0100共4个位元组 转换成char型别后,前3个位元组丢弃 即结果是0011 0100 共1个位元组 对应的十进位制是52 当语句a = (char)(b)执行完后 这1个位元组的值也就是52就放到了变数a所对应的储存空间, 而不是原来的0000了 所以,整个过程并没有改变变数a和b的资料型别 原来是int型别现在还是int型,程式只是修改了变数a 的值,连b的值都没有修改,因为修改a的值时只是从b所 对应的储存空间里把b的值取出来用一用,用的结果是修改成 char型别,但他把修改后的结果放到a所对应的储存空间了, 并没有放到b所对应的储存空间,所以原来b所对应的值没有被 覆盖,原来是0X1234,现在还是0X1234 仅供参考!呵呵
(rData+3*((long)tmpRawData0-1024l ))/10l );
就是 rData + (3*(tempRawData0-1024)) /10
后边的l是长整形的意思,
*和/是同等优先顺序的运算子,按从左到右计算。
tempRawData0先减去1024然后乘以3,再除以10,再加上rData
强制型别转换不是printf语句预设的动作,正确的是这样的:
printf("%d\n",(int)a);
否则如果写printf("%d\n",a);则printf不会做强制资料型别转换的。
1,假设 float x=0.0; int y=5; 当然这样的假设不合理,不建议真正程式设计中使用
则,x = (float)y; 这是C中的强制型别转换,是没有编译错误的,但有没有逻辑错误得看你
程式码的上下文
2,至于num(float);
可以这么告诉你,这是个函式,并且只有一个引数,该引数型别为float。
对于强制型别转换来说,永远都是将表示式的右值(=右边的部分)强转(人为的)成符合左值(=左边的部分)的型别。
无法解释
你什么编译器啊?
我用g
验证程式
int main()
{
volatile int a=0;
volatile float b=0.14;
a= (int) (b *1000);
printf("%d\n",a);
}
输出
140
强制转换是“取整”,不进行“四舍五入”,也就是取不大于被强制的资料的最大(绝对值)整数!
你用的编译环境可能是TC吧!这样的编译器预设int型为两个位元组即16个二进位制位,对有符型int来说二进位制位最高位表示符号,“0”为正、“1”为负。
又数在记忆体中是以其补码形式存在,正数补码为其本身,如二进位制数101011在记忆体中的表示为0 0000000 00101011,第一个0表示此数为正数,后面为其补码;负数的补码为其反码+1 ,如-100110,先将其改写为-0000000 00100110,(由最高位为符号站不管它,先看资料位即后15位)取反得1111111 11011001(先不管符号)在+1得1111111 11011010 在将符号位写上1 1111111 11011010 这样-100110的补码即在计算机记忆体中存放的形式就表现出来了1 1111111 11011010 。
对(int)m=1 00000000 00000000,由于其是十七为数,在存放时将最高位1舍去了在记忆体中被储存为0 0000000 00000000 就是正数0。
再看(int)n=11111111 11111111 它其实是-1在计算机中的补码,但我们知道计算机在输出时是将其变为原码输出的,故执行结果就是(0,-1)。
为了避免此种情况或得到表示范围更广的整数,建议使用VC编译器,因为其整形资料在记忆体中占4位元组。
这个是因为每个汉字占了2个位元组,当然用中文输入法输入的符号也占2个位元组,且每个位元组里所存的ASCII值(这里说ASCII值不太准确)均为负值,你写的程式是只要输入流里有东西,就会回圈一次,即读入再输出。¥的2个ASCII值分别为-93和-92,第一次读入了-93,输出一次,然后第二次执行到cin时,又把-92读入,再输出,所以就有2个值了
int open()
FILE *fopen()
你弄混啦