#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
由于 short 是 2 字节所以 twos complement -10 is 65526
但为什么在 z
case
中不一样
最佳答案
当 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()
看到 %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
通常是处理器最佳使用的 native 大小 - 通常最快。
作为unsigned short int
在某些实现中,小于 unsigned int
.它是大型阵列节省空间的首选。
关于c - unsigned short int 与 unsigned int 有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19335839/