int a=0x7bcd; short b=ox8bcd; a|=(int)b; printf("%04x",b);

发布网友 发布时间: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也变成了负数。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com