1、在C语言中整型常量的数据类型默认为int,所以unsigned int a = -1中,-1的类型是int类型。实际上是有一个隐式转换,即将int类型转成unsigned int类型。 这个转换的意义不大,因为没有超出unsigned类型的表示范围,所以a的机器码依然是-1的机器码。2、printf输出函数的控制字符是%d,即输出有符号...
最后为0,再执行一次不是-1,是发生溢出导致结果为65535 当一个有符号整数(signed int)的值为-1时,如果将其转换为无符号整数(unsigned int),则会发生溢出,导致结果变成65535。 这是因为有符号整数和无符号整数在内存中的表示方式不同。有符号整数使用二进制补码表示,而无符号整数使用二进制表示。当将-1转换为无...
也就是说,将unsigned int强制类型转换成int,或将int转换成unsigned int底层的位表示保持不变。 也就是说,即使是-1转换成unsigned int之后,它在内存中的表示还是没有改变,即1111,1111,1111,1111。我们知道在计算机的底层,数据是没有类型可言的,所有的数据非0即1。数据类型只有在高层的应用程序才有意义,也就是...
解析 unsigned int的取值范围是0-65535但是输出的时候,确实按照signed int输出的.signed int的取值范围是-32768到32767,65535无法显示.在Unsigned int中,65535的补码是1111 1111 1111 1111对于Signed int来说,上面的补码是-1,所以显示的就是-1啦.反馈 收藏 ...
在C语言中,unsigned short int a=-1,看似矛盾的赋值实则遵循特定规则。-1作为有符号整型被赋予unsigned短整型变量a,触发类型转换。通常情况下,-1以32位二进制形式表示,即全1状态,即0xFFFFFFFF。当这值赋给无符号16位整型变量a时,高16位被截断,保留低16位全1状态,即0xFFFF。输出时使用%d...
很简单,这个主要是因为补码的方式,这个问题是从位级的角度来看的。补码怎么表示-1呢?比如说用两位来表示就是 11, 三位就是111,4位就是1111。最高位权重为 -1; 分别 -1 = 1*(-2) + 1, -1 = 1*(-2^2) + 1* 2^1 +1 *2^0, -1 = 1*(- 2^3) + 1*(2^2)+1*(2...
unsigned int b=65535;printf(“%d”,b);的结果为什么是-1啊 答案 在无符号整型中表示65535,其二进制数是1111 1111 1111 1111.而转化为有符号的话,1111 1111 1111 1111表示的数是多少呢。我们知道,在有符号的时候,负数的表示是原码取反加1.那么我们来反推1111 1111 1111 1111等于...相关推荐 1unsigned int...
unsigned short inta=-1相当于:unsigned short int a=(int)-1 即-1默认为int即有符号整型,当前大...
无符号数(unsignedint)也占有两个字节的内存,但是它没有符号位,最高位也是数据的一部分。例如1000000000000001表示负整数,其值为-1(符号位为1,也就是一串0之前的1),0000000000000011表示正整数,其值为3,而对于无符号数最高位不代表符号,例如1000000000000000表示无符号数,其值为1乘以2的15次方,即32768。 在你的...
unsigned int虽然是无符号型,但是存储方式和int型完全一样,同样是四个字节大小。因此存储 -1 时 ,同样是保存为 0xFFFFFFFF ,但是如果按照无符号型输出,就相当于无符号型的最大值。比如 int 型的-1 如果用 %u 输出的话,也会是一个很大的数。