/* 原文已於2021/3/11日做出修正 */
本蒟蒻因為在某**中看到~(-1)=0 感到困惑,所以好好的學習了如下內容,弄親了反碼與取反運算的區別,特寫此文用於日後回顧。
1,原碼,反碼,補碼
1.1 原碼
原碼就是將乙個數轉化為二進位制數。
如:14----- 00001110
1.2 補碼
補碼分兩種正數的補碼和負數的補碼
1.2.1 正數補碼
正數補碼就是其本身
如:原碼:14------00001110
補碼: 00001110
1.2.2 負數補碼
負數補碼是將原碼求反碼(每一位按位取反(不包括符號位),即第一位)後加1。
如: 原碼 14------00001110
除符號位按位取反 01110001
取反後加1 01110010
1.3 反碼
無論是負數還是正數,反碼就是除符號位按位取反,也就是0變1,1變0。
如:-14 ------- 10001110
反碼--------11110001
2,取反運算子 ~
取反運算用我的話就是一句:
無論是什麼數,正數也好,負數也罷,都要進行以下步驟
1,求補碼
2,按位取反
3,求補碼
不信的可以參考一下其他人的文章中的例子:
取反運算的正反示例
java二進位制正數和負數取反
反碼 取反 按位取反 這3個概念是不一樣的。取反 0變1,1變0 反碼 正數的反碼是其本身,對於負數其符號位不變其它各位取反 0變1,1變0 按位取反 這將是下面要討論的。要弄懂這個運算子的計算方法,首先必須明白二進位制數在記憶體中的存放形式,二進位制數在記憶體中是以補碼的形式存放的。另外正數和負數...
關於為什麼負數的補碼為符號位不變各位取反加1
數在計算機中是以二進位制形式表示的。數分為有符號數和無符號數。原碼 反碼 補碼都是有符號定點數的表示方法。乙個有符號定點數的最高位為符號位,0是正,1是副。以下都以8位整數為例,原碼就是這個數本身的二進位制形式。例如0000001 就是 1 1000001 就是 1 正數的反碼和補碼都是和原碼相同。...
和 的區別 邏輯取反和按位取反
在c語言中 代表邏輯取反,即把所有非0的數值 相當於1 變為0,0變為1 表示按位取反,即在數值的二進位制表示方式上,將0變為1,將1變為0 針對邏輯運算與按位運算區別如下 針對這個問題,有乙個經典的題目 int x 3 do while x 則上面的程式段,以下哪個選項正確 a.輸出的是1 b.輸...