1
#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为什么不一样casez

4

1 回答 1

4

unsigned short int x=-10;发生时,无x符号的 获得模数或“包装”值65526 (OP sizeof(short) 为 2)。类似的东西x = power(256,sizeof(unsigned short)) - 10

打印时x,它printf()作为int(可变参数提升)传递给。OP 的 sizeof(int) 为 4,因此 65526 适合int. 然后printf()看到 a%d并打印“65526”。

z有一个类似的故事,但 sizeof(z) 是 4. 并被初始化z = power(256,sizeof(unsigned)) - 10

printf()正在%d使用unsigned. OP 应该使用%u.

printf("x=%u y=%d z=%u m=%d",x,y,z,m);

unsigned short int保证至少覆盖0 到 65535 的范围。

unsigned int保证至少覆盖的范围unsigned short int。它可能涵盖更广泛的范围。

unsigned int通常是处理器最适合使用的本机大小 - 通常是最快的。

unsigned short int原样,在某些实现中,小于unsigned int。它是大型阵列节省空间的首选。

于 2013-10-12T15:41:37.027 回答