如何利用~ & ^ | + 及移位運算子來實現 ! 的功能
**
如何利用 ~ & ^ | + << >> 等運算子來實現 ! 的功能
**
假設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就實現了 ! 的功能
相關文章
- 孫海洋老師C語言零基礎自學入門 ----移位運算子及移位表示式C語言
- 企業如何利用安全運營來實現業務現代化
- Javascript實現運算子過載JavaScript
- 2.5 運算子及運算子的優先順序;2.6 語句
- Rust 運算子及示例Rust
- 如何利用 Redis 快速實現簽到統計功能Redis
- php運算子運用之型別運算子該如何使用PHP型別
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- 運算子 運算子
- python算術運算子的擴充套件功能Python套件
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- javascript中&&運算子和||運算子的使用JavaScript
- 算術運算子裡的特殊運算子
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- Python的各類運算子及用法彙總!Python
- 手寫程式語言-實現運算子過載
- 運算子-賦值運算子賦值
- 利用jQuery實現表單驗證功能jQuery
- 利用指標實現strncmp函式功能指標函式
- 利用ConcurrentHashMap來實現一個ConcurrentHashSetHashMap
- 利用static來實現單例模式單例模式
- python的運算子Python
- Java的運算子Java
- 如何使用natapp來實現內網穿透及案例APP內網穿透
- 剩餘運算子與展開運算子的區別
- 利用java實現提現金額到支付寶賬戶的功能Java
- 運算子
- python的爬蟲功能如何實現Python爬蟲
- 利用 Redis 生成序列號的功能實現編號自增Redis
- Python 運算子優先順序 運算子Python
- Python學習-算術運算子,賦值運算子和複合運算子Python賦值
- Linux路由器功能如何實現的呢?linux運維入門學習Linux路由器運維
- python運算子及優先順序順序Python
- java零基礎自學第一天②,運算子:表示式,算術運算子,+操作,賦值運算子,自增自減運算子,關係運算子,邏輯運算子,三元運算子Java賦值
- 如何利用排班實現告警的靈活分派?
- AOP如何實現及實現原理
- js中的運算子JS