发布网友 发布时间:2024-09-29 10:06
共1个回答
热心网友 时间:2024-09-29 10:31
在C语言中,int占2字节。在C++中,int占4字节。
而short都是2字节。
而补码是运算过程中CPU才要用的,用户看不到,printf得到是运算结果,而不是补码。
你看这个C++程序:
int
a=0x8bcd;
short
b=0x8bcd;
printf("a=%x,%d
b=%x,%d\n",a,a,b,b);
a=b;
printf("a=%x,%d
b=%x,%d\n",a,a,b,b);
运行结果是:
a=8bcd,357
b=ffff8bcd,-29747
a=ffff8bcd,-29747
b=ffff8bcd,-29747
可以看出,一开始都是0x8bcd,但a是正数,b是负数
执行a=b后,b被转换成int,为了保证符号不变,符号扩展后b仍为负数,结果a也变成了负数。