unsigned 10; int -20; i+j=?
发布网友
发布时间:2022-05-10 18:25
我来回答
共4个回答
热心网友
时间:2023-10-21 15:49
这要看你的i+j的输出格式的 如果是%u 输出的话 那肯定是没有负数的。应该是一个很大的正书。但是以%d输出的话就会转成int 类型了 就会是-10了。其实你的理解是对的,不要相信别人的答案追问谢谢支持!!
热心网友
时间:2023-10-21 15:49
就以类似的例子来描述:
unsigned int a = 6;
int b = -20;
i+j=?
解释:
unsigned int类型的数据与int类型的数据相运算后,自动转化为unsigned int类型。因此a+b的值不是-14,而是一个unsigned int类型的数4294967382.
1.先说下这个数字怎么来的:
在内存中,负数的存储方式是正数的反码+1.
6:0x00000006
20:0x00000014,补码:0xfffffffeb
-20:0xfffffffec
>>> 0xffffffec+0x06
4294967282L
2.%d,%u输出结果不一样?
int 与unsigned存储形式一样,都是补码形式,区别在于输出的格式控制符,当以%d输出,会认为是有符号数,这样就把最高位的1当成了符号位,也就是负数(0是正数),当以%u输出,会认为是无符号数,这样它会将所有16位的组成都看成是数本身的组成,而没有符号位一说,所以输出结果是由16个1组成的二进制数。
热心网友
时间:2023-10-21 15:50
-10,在运算时会隐含的进行类型转化,低类型向高类型转换,比如,float和在Linux_32位系统中unsigned比int要低。但是切记这不是一定的,说不定winTC追问别粘别的地方的
热心网友
时间:2023-10-21 15:50
unsigned int (-1)的话会变成-1的补数,反正不是-1了