位運算子,原碼 反碼 補碼

2022-05-15 14:02:43 字數 1892 閱讀 2495

按位運算就把數字轉換為機器語言->二進位制的數字來運算的一種運算形式。

& 按位與運算子:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

| 按位或運算子:參與運算的兩個值,只要其中有乙個為1,則該位結果就為1

^ 按位異或運算子:當兩個對應的二進位相異時,結果為1

~ 按位取反運算子:對資料的每個二進位制位取反,即把1變為0,把0變為1。將二進位制數+1之後乘以-1,即~x=-(x+1)

<< 左移動運算子:運算數的各二進位全部左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0

>> 右移動運算子:把">>"左邊的運算數的各二進位全部右移動若干位,">>"右邊的數指定移動的位數

只有按位取反運算子是單目運算子,其他都是雙目運算子。

a = 60  # 0011 1100

b = 13 # 0000 1101

print(a&b)

# 12

print(a|b)

# 61

print(a^b)

# 49

# 按位取反,1100 0011

print(~a)

# -61

# 向左移動兩位,1111 0000

print(a<<2)

# 240

# 向右移動兩位,0000 1111

print(a>>2)

# 15

計算機中的符號數有三種表示方法,三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」。

在計算機系統中,數值一律用補碼來表示和儲存。

原碼: 正數轉化為二進位制,負數第一位取1。5=>0b101,1=>0b1,-1=>-0b1

1:0000 0001

-1:1000 0001

反碼: 正數的反碼與原碼相同,負數的反碼符號位不變其餘按位取反

1:0000 0001

-1:1111 1110

補碼:正數的補碼與原碼相同,負數的補碼符號位不變其餘按位取反後+1

1:0000 0001

-1:1111 1111

負數的表示方法

- 早期數位電路的cpu中的運算器實現了加法器,但是沒有減法器,減法要轉換成加法

- 負數在計算機中使用補碼儲存,-1的補碼為 1111 1111

- 5-1 => 5+(-1)直覺上是0b101-0b1,其實計算機中是0b101+0b11111111,溢位位捨棄

5+(-1)兩個二進位制數相加,逢2進1

0000 0101

1111 1111

---------

0000 0100

print(~12)

# -13

12:0000 1100

取反:1111 0011

# 反推

1111 0010

1000 1101

print(10^9)

# 30000 1010

0000 1001

---------

0000 0011

print(10^-9)

# -3

# -9的補碼

1000 1001

1111 0111

# 用-9的補碼與10的補碼進行抑或運算

0000 1010

1111 0111

---------

1111 1101

# 把得到的補碼還原。反推,將上面的結果-1然後取反,符號位不變

1111 1100

1000 0011

參考:

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

今天呢,剛開始學習python的一些基礎知識,在位運算子中,通常使用以下幾個符號 其中涉及到了原碼,反碼,補碼的理解。下面簡單介紹一下 原碼 正數的原碼就是本身的二進位製碼,比如5,原碼就是0101,而負數的話要在首位也就是符號位變成1,表示負數,即 5 的原碼為1101。反碼 即首位符號位不變,其...

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...