原碼 反碼 補碼

2021-09-24 21:59:59 字數 1781 閱讀 5284

一、二進位制在運算中的說明

二進位制是逢 2 進製的進製,0、1 是基本算符。

現代的電子計算機技術全部採用的是二進位制,因為它只使用 0、1 兩個數字符號,非常簡單方便,

易於用電子方式實現。計算機內部處理的資訊,都是採用二進位制數來表示的。二進位制(binary)數用 0

和 1 兩個數字及其組合來表示任何數。進製規則是「逢 2 進 1」,數字 1 在不同的位上代表不同的值,按從右至左的次序,這個值以二倍遞增。

二、原碼、反碼、補碼

對於有符號的而言

二進位制的最高位是符號位:0表示正數,1表示負數

1 =>   [0000 0001]

-1=> [1000 0001]

正數的原碼、反碼、補碼都一樣

負數的反碼 = 它的原碼符號位不變,其他取反(0->1 , 1->0)

負數的補碼 = 它的反碼+1

1 ==> 原碼 [0000 0001]   反碼[0000 0001]   補碼[0000 0001]

-1 ==> 原碼 [1000 0001] 反碼[1111 1110] 補碼[1111 1111]

0的反碼,補碼都是0

在計算機運算的時候,都是以補碼的方式來計算的

1+1   1-1 = 1+(-1)
三、位運算子

golang 中有 3 個位運算

按位與&

按位或|

按位異或^

分別是」按位與&、按位或|、按位異或^,它們的運算規則是:

按位與**&** : 兩位全為1,結果為1,否則為0

按位或**|**:兩位有乙個為1,結果為1,否則為0

按位異或^:兩位乙個為 **0,**乙個為1,結果為1,否則為0

案例:

package main

import

"fmt"

func

main()

//2&3

//2的補碼 0000 0010

//3的補碼 0000 0011

//2&3 0000 0010 =>2

//2|3 0000 0011 =>3

//2^3 0000 0001 =>1

//-2^2

//-2的原碼 1000 0010

//-2的反碼 1111 1101

//-2的補碼 1111 1110

//2 的補碼 0000 0010

//-2^2

//-2的補碼 1111 1110

//2 的補碼 0000 0010

//-2^2 1111 1100 (補碼)

//-2^2 1111 1011 (反碼)

//-2^2 1000 0100 (原碼) => 4

為什麼-2^2的時候不是用補碼,而是用原碼,其他運算不都是補碼嗎?前面也講到計算機的運算其實是補碼運算!

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

正數 原碼 反碼 補碼一樣 7 原 0 0000111 b 7 反 0 0000111 b 7 補 0 0000111 b 負數 原碼就是原來的表示方法 反碼是除符號位 最高位 外取反 補碼 反碼 1 7 原 1 0000111 b 7 反 1 1111000 b 7 補 1 1111001 b 當...

原碼 反碼 補碼

數值在計算機中表示形式為機器數 計算機只能識別0和1,使用的是二進位制,而在日常生活中人們使用的 是十進位制,正如亞里斯多德早就指出的那樣,今天十進位制的廣泛採用,只不過我們絕大多數人生來具有10個手 指頭這個解剖學事實的結果.儘管在歷史上手指計數 5,10進製 的實踐要比二或三進製計數出現的晚.摘...