如果 2^31-1 的二进制表示是 01111111 11111111 11111111 11111111,那么当类型转换为 short 时该二进制数会发生什么?这是假设一个 int 是 4 个字节,而一个 short 是 2 个字节。
我写了一个测试程序,当类型转换为short时输出为-1。它是否正确?这是否意味着 typecast to short 只是砍掉了 16 个最高有效位,留下 11111111 11111111 (有符号 2 的补码)?
代码
#include <stdio.h>
#include <stdlib.h>
void main()
{
int x = sizeof(int);
int y = sizeof(short);
printf("%d, %d",x,y);
int a = 2147483647;
short b = (short)a;
printf("\nad: %d",(int)a);
printf("\nax: %x",(int)a);
printf("\nau: %u",(int)a);
printf("\nbd: %d",(int)b);
printf("\nbx: %x",(int)b);
printf("\nbu: %u",(int)b);
printf("\n");
}
输出
4, 2
ad: 2147483647
ax: 7fffffff
au: 2147483647
bd: -1
bx: ffffffff
bu: 4294967295