这题怎解?

来源:百度知道 编辑:UC知道 时间:2024/06/22 02:15:04
下列程序执行后的输出结果是( )
A、-32767 B、FFFE
C、-1 D、-32768
main( )
{
int x=0xFFFF;
printf("%d \n",x--);
}
在16位机上运行

我的理解:原码 16条1 最高位为1 即位负数即=-32767
补码=2^n+原码,=2^16-32767==32769.化为2进制为1000000000000001,最高位为1,即负数 ,000000000000001=1,即为-1

不明的是为什么会用补码输出,用反码不行吗? 补码干什么用的

用补码,可以根据最高来判断是正数还是负数,反码没有办法判断或者不方便

在16位机器上,假设整数占两个字节(这一点是否成立有等考证).那么int x=0xFFFF;
那么x=-1(十进制)

printf("%d \n",x--); 这句输入的x的原来的值,不是x-1,所以输出-1然后x变为-2(十进制).