按位運算就把數字轉換為機器語言->二進位制的數字來運算的一種運算形式。
只有按位取反運算子是單目運算子,其他都是雙目運算子。& 按位與運算子:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0
| 按位或運算子:參與運算的兩個值,只要其中有乙個為1,則該位結果就為1
^ 按位異或運算子:當兩個對應的二進位相異時,結果為1
~ 按位取反運算子:對資料的每個二進位制位取反,即把1變為0,把0變為1。將二進位制數+1之後乘以-1,即~x=-(x+1)
<< 左移動運算子:運算數的各二進位全部左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0
>> 右移動運算子:把">>"左邊的運算數的各二進位全部右移動若干位,">>"右邊的數指定移動的位數
計算機中的符號數有三種表示方法,三種表示方法均有符號位和數值位兩部分,符號位都是用0表示「正」,用1表示「負」。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
在計算機系統中,數值一律用補碼來表示和儲存。
原碼: 正數轉化為二進位制,負數第一位取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...