unsigned short int与unsigned int的区别如何

时间:2013-10-12 15:23:16

标签: c unsigned short

#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 intunsigned 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。最好使用大型阵列节省空间。