如何利用~ & ^ | + 及移位運算子來實現 ! 的功能

我學不完了發表於2019-03-28

**

如何利用 ~ & ^ | + << >> 等運算子來實現 ! 的功能

**
假設x為非0元素,那麼 !x=1,x為0,則!x=1
把他們寫成2進位制的來觀察一下
1.先隨便列幾個數來觀察一下規律

#1
x=00000000;
!x=00000001;
#2
x=01010010;
!x=00000000;
#3
x=10111000;
!x=00000000;

可以看出來,只要x中含有1,最後 !x 就得為全0,x為全0的話,只要最後一位加上1就行了
2.進一步去細想
(1)x沒出現1,想辦法變為全0,最後加上0x1
(2)x出現1,想辦法變為全1,最後加上0x1(因為會溢位就會變成全0)
3.怎麼實現x出現1為全1
(1)只要最高位是1,然後右移31位
4.怎麼實現最高位是1
對x進行取反,然後加1,這樣子如果是全0的話最後得到的也會是全0(溢位了),如果含有1的話,則在最先出現1的位元位上會變成1,這個1左邊是取反的結果,右邊全是0。然後將取反加1後的結果與x取或,這樣就能得到以這個1位界限,左邊全是1,右邊全是0的結果,當然,最高位也是1。

#1
x=10101010;
~x+1=01010110;
x|(~x+1)=11111110;
#2
x=00000000;
~x=11111111;
~x+1=00000000;
x|(~x+1)=00000000

5.這樣就得到了我們要的結果,最後只需要將得到的結果右移31位,然後加上1就實現了 ! 的功能

相關文章