位運算子計算中的原碼,反碼,補碼

2021-09-26 04:32:42 字數 1191 閱讀 1315

今天呢,剛開始學習python的一些基礎知識,在位運算子中,通常使用以下幾個符號:& | ^ << >>,其中涉及到了原碼,反碼,補碼的理解。下面簡單介紹一下&,<<

原碼:正數的原碼就是本身的二進位製碼,比如5,原碼就是0101,而負數的話要在首位也就是符號位變成1,表示負數,即 -5 的原碼為1101。

反碼:即首位符號位不變,其餘位數0變成1,1變成0,如5的原碼為0101,反碼即為0010,-5的反碼為1010。

補碼:補碼的產生是由於負數表示和計算的需要,正數的補碼是本身的原碼,但是負數的補碼則是反碼加1,例如-5,原碼為1101,反碼為1010,補碼為1011。

驗證:將5的原碼與-5的補碼相加結果應為0

0101+1011=10000,這裡可以看到溢位了一位,結果我們只取後四位。

所有的運算,都使用補碼進行運算,因為原碼的補碼就是本身,負數就要轉換成補碼進行運算。計算機底層儲存資料的時候都是使用補碼儲存。(二進位制變成中的表示方法,前面加上0b,例:1的二進位制表示賦值給a,a=0b0001)

運算子&,兩個都為一時取1,否則為0,例0001&0101=0001

a =-5

#原碼1101 反碼1010 補碼1011,負數使用補碼運算

b =4

#原碼0100,正數使用原碼運算

print

(a&b)

#1011&0100=0000

print

(a+b)

#1011+0100=1111(首位1表示符號為負)

運算子 <<:

<<  相當於乘法,每移動一位,相當於*2-

4<<

1#-4的原碼 100000100 反碼11111011 補碼11111100 (不是所有的數原碼和補碼一樣)

#左位移1位為11111000--補碼 10001000--原碼 -8

#原碼--補碼 轉換成反碼+1

#補碼--原碼 轉換成反碼+1-4

<<

2#向左移動兩位

#左移動2位為11110000--補碼,原碼為補碼轉換成反碼+1,原碼為10010000,首位為符號位,結果為-16

運算子 >>:模擬運算子<<,向右移動,每移動一位,相當於除以2,如果不能整除,則向下取整。

位運算子,原碼 反碼 補碼

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

Java中的原碼 補碼 反碼與位運算子

1.原碼 計算機中可以用1個 4個 8個 最高位來表示負數 假設使用乙個最高位老表示則0表示整數 1表示負數 正整數 10 0000 1010 負整數 10 1000 1010 2.反碼 正整數 和原碼一樣 10 0000 1010 負整數 符號位不變,其餘按位取反 10 1111 01 0 1 3...

原碼 補碼 反碼以及位運算

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