原碼 補碼 反碼以及位運算

2021-09-19 23:33:25 字數 2148 閱讀 2258

2 位運算

機器數是乙個數在計算機中的二進位制表示形式,機器數是帶符號的,在計算機中用乙個數的最高位(第一位)存放符號, 正數為0, 負數為1。例如1(帶符號即+1)在計算機中的最終表示形式為 0000 0001,依此類推-1的二進位制為 1000 0001。這種表示方式又叫做原碼,其中0的原碼為0000 0000。

注:為什麼10000 0001而不是 0001,在計算機中最小的儲存單位是位元組,1個位元組佔8位

如果是正數,反碼和原碼是一樣的,也就是1的原碼是0000 0001,它的反碼也是0000 0001.

如果是負數,反碼就是在原碼的基礎上保持符號位不變,其它依次取反,因為-1的原碼是 1000 0001,所以它的反碼是 1111 1110

如果是正數,補碼和原碼是一樣的,也就是1的原碼是0000 0001,它的補碼也是0000 0001.

如果是負數,補碼就是在反碼的基礎上加1,因為-1的原碼是 1000 0001,它的反碼是 1111 1110,所示它的補碼是1111 1111。

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

0的原碼、反碼、補碼都是0000 0000。

負數的反碼符號位表示符號的值不變,其它取反,補碼在反碼基礎上加1。

注:計算機中的運算都是以補碼的形式參與運算的!!!!!

計算機中的運算都是以補碼的形式參與運算的!

按位與運算規則是:相同位都為1,則為1,否則為0。

舉個例子:

例1:計算1&3的值是多少?

1的原碼是0000 0001,補碼為0000 0001

3的原碼是 0000 0011,補碼為0000 0011

通過上面的規則只有最後一位都是1(補碼參與運算,後同),所以最後的結果是 0000 0001,原碼也是0000 0001,也就是1,即1&3=1。

我們通過**展示:

func

main()

程式最終輸出結果是1。

例2:計算-1&3的值是多少?

-1原碼是1000 0001,反碼是1111 1110,補碼是1111 1111。3的原碼、反碼、補碼都是0000 0011。由於最後兩個都是1,所以結果是 0000 0011,原碼也是0000 0011,即為3。

按位或的運算規則是:只要有乙個為1,則為1,否則為0。

舉例:例1:1|3結果是多少?

1的補碼是0000 0001,3的補碼是0000 0011,所示結果為0000 0011,原碼為0000 0011,即為3。

**:

func

main()

例2:-1|3的結果是多少?

-1的補碼是:1111 1111,3的補碼是 0000 0011,所以結果是為1111 1111,原碼為1000 0001,即為-1。

按位異或的規則是:相同位相同則為0,不同則為1.

舉例:例1:1^3是多少?

1的補碼是0000 0001,3的補碼是0000 0011,結果是0000 0010,對應的原碼是0000 0010,即為2。

例2:-1^3的結果是多少?

-1的補碼是:1111 1111,3的補碼是 0000 0011,所以結果是為1111 1100,原碼為1000 0100,即為-4。

右移運算的規則是:低位(0)補齊,用符號位補移出的高位(1)。

舉例:例1:1>>5是多少?

1的補碼是0000 0001,右移5後為,0000 0000,符號位是0,補最後乙個1,結果還是 0000 0000,即0。

例2:3>>1是多少?

3的補碼是0000 0011,右移1後為,0000 0001,符號位是0,補倒數第二個1,結果是 0000 0001,即1。

左移運算的規則是:符號位不變

舉例:例1:-1<<5是多少?

-1的補碼是1111 1111,左移5是1110 0000,補碼是1101 1111原碼是1010 0000,即-32。

例2:3<<1是多少?

3的補碼是0000 0011,左移1後為是0000 0110,原碼是 0000 0110,即6。

例3:3<<6是多少?

3的補碼是0000 0011,左移1後為是0000 1100 0000,原碼是 0000 1100 0000,即192。

運算(原碼 補碼 反碼)

表示不帶符號向右移動二進位制數,移動後前面統統補0 兩個箭頭表示帶符號移動,沒有 這種運算子,因為左移都是補零,沒有正負數的區別。如 12 的二進位制為 1111 1111 1111 1111 1111 1111 1111 0100 12 3 即帶符號右移3位,結果是 1111 1111 1111 ...

位運算子,原碼 反碼 補碼

按位運算就把數字轉換為機器語言 二進位制的數字來運算的一種運算形式。按位與運算子 參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0 按位或運算子 參與運算的兩個值,只要其中有乙個為1,則該位結果就為1 按位異或運算子 當兩個對應的二進位相異時,結果為1 按位取反運算子 對資料的每個...

原碼 反碼 補碼,以及負數的位操作

1 原碼 將符號位數位化了的數,其中 用0 表示,用 1表示。反碼 正數的反碼表示與原碼表示一樣 負數的反碼表示是原碼表示的符號位不變,數值位逐位取反。補碼 正數的補碼表示與原碼表示一樣 負數的補碼表示是原碼表示的符號位不變,數值位逐位取反後最低位加1 反碼表示最低位加1 例 假如以八位二進位制表示...