負數的取反

2021-10-16 12:36:02 字數 799 閱讀 2660

/* 原文已於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.輸...