一、二進位制在運算中的說明
二進位制是逢 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進製 的實踐要比二或三進製計數出現的晚.摘...