寄存器位数会导致取反等操作符号扩展

来源:互联网 发布:网络yy63094女主播 编辑:程序博客网 时间:2024/04/28 04:00

在《程序员面试宝典》中看到一个经典考题

unsigned char a = 0xa5;
unsigned char b = ~a>>4+1;

即b=0x5a>>5,即0x01011010>>5 = 0x00000010,答案理论上是2,但实际运行的时候是250,即0xfa。


原因在于目前的电脑寄存器位数是32位,在做取反操作时,得到的临时结果不是0x5a,而是0xffff ff5a,故移位后结果是0x007f  fffa,截断后面的八位即是0xfa


测试如下:



原创粉丝点击