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 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
不一样
【问题讨论】:
***.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 *
short int 到 unsigned int 转换网络字节顺序 C++