如何利用~ & ^ | + 及移位運算子來實現 ! 的功能
**
如何利用 ~ & ^ | + << >> 等運算子來實現 ! 的功能
**
假設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就實現了 ! 的功能
相關文章
- 移位運算子詳解
- java移位運算子具體解釋Java
- 孫海洋老師C語言零基礎自學入門 ----移位運算子及移位表示式C語言
- js利用求餘運算子實現各行變色效果JS
- 企業如何利用安全運營來實現業務現代化
- java 移位運算子,取反運算子 >> >> ~ , java 負數補碼存放規則等同於機器儲存Java
- Javascript實現運算子過載JavaScript
- Rust 運算子及示例Rust
- php運算子運用之型別運算子該如何使用PHP型別
- 如何利用 Redis 快速實現簽到統計功能Redis
- 運算子 運算子
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- javascript中&&運算子和||運算子的使用JavaScript
- 算術運算子裡的特殊運算子
- YTU-OJ-實現複數類中的加運算子過載【C++運算子過載】C++
- 運算子-賦值運算子賦值
- 2,javase程式碼實戰-運算子——位運算實現加密解密 (一)Java加密解密
- python算術運算子的擴充套件功能Python套件
- 【原】兩個時間相加的運算子過載實現
- 手寫程式語言-實現運算子過載
- javascript運算子——邏輯運算子JavaScript
- javascript基礎(賦值運算子,關係運算子,相等運算子,三元運算子,運算子的優先順序,程式碼塊)(十)JavaScript賦值
- javascript如何實現類的功能JavaScript
- 如何實現這樣的功能?
- js利用cookie實現的計數功能程式碼JSCookie
- 利用Oracle的全文索引實現切詞功能Oracle索引
- Python的各類運算子及用法彙總!Python
- Java的運算子Java
- 4,javase程式碼實戰-運算子——左移右移實現乘除(三)Java
- 【實驗】【MySQL】MySQL中的運算子展示MySql
- 利用jQuery實現表單驗證功能jQuery
- 利用指標實現strncmp函式功能指標函式
- 利用JS實現複製/貼上功能JS
- 位運算可以實現哪些功能
- 運算子