在《程序员面试宝典》中看到一个经典考题
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
测试如下:
在《程序员面试宝典》中看到一个经典考题
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
测试如下: