求解释下,为什么这段程序输出是250
#include <cstdio> int main() { unsigned char a = 0xA5; unsigned char b = ~a >> 4 + 1; // std::cout<<b<<std::endl; printf("%d", b); return 0; }
主要是我不明白程序使用了寄存器的哪些位
1. ~a:把a取反,得到ox5a
2. 4+1:C语言中加法优先级高于移位,因此先计算加法,结果为5
3. ~a>>5:右移5位,先转为整数,再移位,补入1,结果为0xfa,即250
我在调试时反汇编了一下,发现用的是eax寄存器,这个寄存器至少是32bit的吧,那这结果就不对了??