unsigned short int 与 unsigned int 有何不同

Posted

技术标签:

【中文标题】unsigned short int 与 unsigned int 有何不同【英文标题】:How does unsigned short int differs from unsigned int 【发布时间】:2013-10-12 15:23:15 【问题描述】:
#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不一样

【问题讨论】:

***.com/questions/3812022/… sizeof(unsigned short int)sizeof(unsigned int) 【参考方案1】:

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

当打印x 时,它作为int(可变参数提升)传递给printf()。 OP 的 sizeof(int) 为 4,因此 65526 适合 int。然后printf() 看到%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。对于大型阵列来说,它是节省空间的首选。

【讨论】:

以上是关于unsigned short int 与 unsigned int 有何不同的主要内容,如果未能解决你的问题,请参考以下文章

unsigned short int 和 unsigned int 或 unsigned short 有啥区别?

将 unsigned short * 转换为 unsigned int *

unsigned int 转 RGB

short int 到 unsigned int 转换网络字节顺序 C++

char,short ,int ,long,long long,unsigned long long数据范围

char,short ,int ,long,long long,unsigned long long数据范围