!和~的區別(邏輯取反和按位取反)
在c語言中,!和~均表示取反,這兩個的區別在於:
- ! :代表邏輯取反,即:把非0的數值變為0,0變為1;
- ~ :表示按位取反,即在數值的二進位制表示方式上,將0變為1,將1變為0;
- 上述其實可以從java中進行借鑑理解,java中!代表邏輯取反,針對的是boolean型值計算;而~代表數值取反,針對整型值進行計算;
通過如下例子來驗證上述結論:
reverse_not.c
#include<stdio.h>
int main(){
int a,b,c;
a = !0;//邏輯運算,0數值轉化為1
b = !10;//邏輯運算,非0數值轉化為0
// 按位取反,10的16進製表示為0x00 00 00 0a,取反後為轉化為0xff ff ff f5(這個是補碼)
// 從補碼往回計算出原碼,得出真值,最高位為1表示為負值,負號後的值為:
// 0x1 00 00 00 00 - 0xff ff ff f5 = 11,得到-11
c = ~10;
printf("%d,%d,%d\n",a,b,c);//運算結果為1,0,-11
}
reverse_not.java
public class reverse_not{
public static void main(String[] args) {
// 這裡程式碼報錯,一元運算子,'!' 的運算元型別int錯誤,可見在java中,
// 規定了!運算子操作
// System.out.println(!10);
// 這裡的運算結果和c語言中一致,也是-11,可見在java中也是使用補碼,
// 並沒有針對做真值取反的所謂優化
System.out.println(~10);
}
}
相關文章
- 取反!和按位取反~的區別
- java取反邏輯Java
- ~ 按位取反運算解析
- Java中按位取反運算子Java
- C# ~按位取反運算子C#
- 按位取反運計算方法
- 位操作(取反)
- 二進位制取反
- java二進位制正數和負數取反Java
- 關於學習java中的按位取反(~)的問題Java
- 對十進位制數字的按位輸出,取反,並求其位數
- Java 16進位制字串 取反Java字串
- Java中的按位取反運算子,哪位能詳解一下?Java
- 物理standby和邏輯standby的區別
- java短路運算子和邏輯運算子的區別Java
- 型別系統和邏輯型別
- mathematica練習程式(影象取反)
- java 位元組陣列取反Java陣列
- 取反(分塊+二分)
- php 和 j s 對數字,字母,漢子等特殊字串 取反PHP字串
- Java中關於十進位制數取反問題解決Java
- 認識資料庫物理備份和邏輯備份區別資料庫
- 溢位OF和進位CF區別
- C++取反交換兩個數的值C++
- 演算法與邏輯的區別演算法
- LeetCode1005. K 次取反後最大化的陣列和LeetCode陣列
- Cookie和Session的區別,Koa2+Mysql+Redis實現登入邏輯CookieSessionMySqlRedis
- 二進位制中為什麼負數是正數取反再加一
- 淺析Win10系統主分割槽和邏輯分割槽的區別Win10
- 計算機中的補碼與java取反運算計算機Java
- javascript邏輯運算子“||”和“&&”JavaScript
- 業務邏輯漏洞和cs
- 電位器和編碼器的區別
- swapinfo可以檢視swap區的大小和掛載的邏輯卷API
- 物理DG與邏輯DG的區別與邏輯DG同步異常處理方法
- ../和./和/的區別
- SAP Fiori應用Footerbar區域按鈕的高亮顯示邏輯
- 從Java中的取反號‘~’看原碼,反碼,補碼Java