1 再补充一点补码的知识,负数在计算机中会用补码来表示 负整数的补码计算是将其原码除符号位外的所有位
取反后加1,比如-1的补码为其绝对值1(0000 0001)->所有位取反(1111 11110) -> 加1(1111 1111)即255
2、接上一点,此时cnt=255 又满足了for循环中cnt>-1判定条件,因此它就会一一直循环下去无法退出。
3、然后循环体内(7-cnt) 也会产生负数,这样和你想要的结果会完全不同。如在cnt=255时 7- cnt=-248 补码
为0x08,即实际向右循环移动了8位之后变成0x80,外面又取反了一次变成 0x7f。 即P2 = 0x7f
4. 最后出现问题不要慌哈 可以借助编译器仿真调试设置断点、变量调试查看。都是这么过来的。 |