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. 最后出現問題不要慌哈 可以借助編譯器仿真調試設置斷點、變量調試查看。都是這么過來的。 |