#include<stdio.h>
int main()
{
unsigned short int x=-10;
short int y=-10;
unsigned int z=-10000000;
int m=-10000000;
printf("x=%d y=%d z=%d m=%d",x,y,z,m);
return 0;
}
输出= x=65526 y=-10 z=-10000000 m=-10000000
我的查询是数据保存方案中unsigned short int
与unsigned int
的区别。即x=65526 where as z=-10000000 why x is not equal -10 where as z can hold any data
因为短{2}字节twos complement -10 is 65526
,但case
z
中为何不相同1>
答案 0 :(得分:4)
当unsigned short int x=-10;
发生时,x
(未签名)获得模数或“包裹”值65526
(OP sizeof(短)为2)。类似于x = power(256,sizeof(unsigned short)) - 10
。
打印x
时,会将printf()
传递给int
(可变参数促销)。 OP的sizeof(int)是4,因此65526适合int
。然后printf()
看到%d
并打印“65526”。
z
有类似的故事,但sizeof(z)为4.并初始化z = power(256,sizeof(unsigned)) - 10
。
您的printf()
正在使用%d
的{{1}}说明符。 OP应该使用unsigned
。
%u
printf("x=%u y=%d z=%u m=%d",x,y,z,m);
保证在至少范围内覆盖0到65535.
unsigned short int
保证涵盖至少范围unsigned int
。 可能涵盖范围更广。
unsigned short int
通常是处理器最佳使用的原生大小 - 通常最快。
在某些实现中,unsigned int
小于unsigned short int
。最好使用大型阵列节省空间。