测试代码块
void main(){ // 1 short x=-4321; //short型占用2个字节 unsigned short y=(unsigned short)x; // 2 int a=165537, b=-34991; //int型占用4个字节 short c=(short)a, d=(short)b; //short型占用2个字节 // 3 short x=-4321; int m=x; unsigned short n=(unsigned short)x; unsigned int p=n; }
研究与结论
代码1:
在代码1 中:
x:1110 1111 0001 1111 真值-4321
强制转化为无符号时变成:
y:1110 1111 0001 1111 真值61215
结论1:
无符号数与有符号数:
不改变数据内容,改变解释方式。
代码2:
int型占用4个字节
将int类型强制转化为short时:
short型占用2个字节
a b c d 结果:
a:0x000286a1 真值165537 c:0x86a1 真值-31071 b:0xffff7751 真值-34991 d:0x7751 真值30545
结论2:
长整数变短整数:
高位截断,保留低位。
代码3:
short x转化为int m ,因为 C 语言中定点整数是用“补码”存储的,所以前面补1。
short x转化为 无符号 n 真值发生改变
unsigned short n 转化成 unsigned int p ,无符号前面补0。
x:1110 1111 0001 1111 16进制:0xef1f m:1111 1111 1111 1111 1110 1111 0001 1111 16进制:0xffffef1f 真值-4321 n:1110 1111 0001 1111 16进制:0xef1f 真值61215 p:0000 0000 0000 0000 1110 1111 0001 1111 16进制:0x0000ef1f 真值61215
结论3:
短整数变长整数:
符号扩展。