C语言中或运算的疑惑,请大家帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/16 20:11:50
shift=0x7f;
for(i=8; i>0; i--)
{
P3=shift;
shift=(shift>>1)|0x80;
}
我自己推算得到shift的八次结果和软件调试时看到的结果有不一样的,实在是疑惑,请大家帮忙列出每一次运算后shift的十六进制形势的结果,并解释下。我的疑惑就是进行了第二次循环后,shift应该是0x9f,可是调试发现是0xdf,求详细解答啊!!!
补充下,上面说错了,是七次结果。当循环内部执行了两次后shift应该是0x9f吧?

不是。程序运行的是对的。你的推断是错的。
shift的初始值是0x7f,也就是01111111,右移一次后是00111111,和0x80,也就是10000000或运算后就是10111111。右移第二次后是01011111,再次进行或运算,就是11011111。1101十六进制就是d,你怎么推断下来是9?