Python中的位運(yùn)算

Python中的位運(yùn)算是程序設(shè)計中對位模式或二進(jìn)制的一元和二元操作。

按位運(yùn)算就是把數(shù)字轉(zhuǎn)換為機(jī)器語言---以二進(jìn)制形式表示


Python中的位運(yùn)算有哪些?

在Python中,按位運(yùn)算符有左移運(yùn)算符(<<)、右移運(yùn)算符(>>)、按位與運(yùn)算(&)、按位或運(yùn)算(|)、按位取反運(yùn)算(~)、異或運(yùn)算符,其中按位取反運(yùn)算符為單目運(yùn)算符


按位左移運(yùn)算符(<<)

在機(jī)器語言中,任何形式均以二進(jìn)制的形式進(jìn)行表示:
舉例:7<<2
二進(jìn)制為:111 左移兩位:11100 最后結(jié)果為:28

左移

按位右移運(yùn)算符(>>)

具體的使用形式和左移一樣。
舉例:7>>2 
   28>>2
二進(jìn)制:7的二進(jìn)制為:111,右移兩位后為001,結(jié)果即為1
     28的二進(jìn)制為:11100,右移兩位后為00111,結(jié)果為7

右移

由于正數(shù)和負(fù)數(shù)的二進(jìn)制形式不同,所以此處特別說下以下兩個運(yùn)算。在計算機(jī)中,負(fù)數(shù)的二進(jìn)制形式是其正數(shù)的補(bǔ)碼形式,此處不做特別的說明,需要知道的以下給出一個鏈接:http://www.cnblogs.com/junsky/archive/2009/08/06/1540727.html

按位與運(yùn)算(&)

  • 正數(shù)和正數(shù)的與運(yùn)算:
    舉例: 7&9
    二進(jìn)制:7的二進(jìn)制為:0111,9的二進(jìn)制為:1001
    說明:根據(jù)(1&1=1、1&0=0、0&1=0、0&0=0)即相同位置同為1結(jié)果即為1,否者為0,由此可見7&9的二進(jìn)制形式為:0111&1001 == 0001
  • 正數(shù)與負(fù)數(shù)的與運(yùn)算:
    舉例:-7&5
    二進(jìn)制:-7:1001,5:0101,結(jié)果為1
    說明:此處你可能要問-7的二進(jìn)制和9的二進(jìn)制不是相同嗎?答案是不相同,在機(jī)器中-7的二進(jìn)制為:11111111 11111111 11111111 11111001,9的二進(jìn)制為:00000000 00000000 00000000 00001001。同樣根據(jù)上文的同為1既為1,所以結(jié)果為1。運(yùn)算最后結(jié)果的二進(jìn)制形式從最左側(cè)的第一個0前的1開始,直至右側(cè)結(jié)尾,將此數(shù)轉(zhuǎn)換為10進(jìn)制,重點(diǎn)是,此處不是依次相加,而是依次相減,得到的結(jié)果最后加上負(fù)號即為最后運(yùn)算的結(jié)果。
  • 負(fù)數(shù)與負(fù)數(shù)的與運(yùn)算:
    舉例:-5&-8
    二進(jìn)制:-5:11111011,-8:11111000結(jié)果為-8
    說明:你可能會很疑惑,此處的結(jié)果明明是11111000,結(jié)果怎么是-8.原因是-5&-8的二進(jìn)制形式為:11111011&11111000 == 11111000,從最左側(cè)的第一個0前的1開始,直至右側(cè)結(jié)尾,將此數(shù)轉(zhuǎn)換為10進(jìn)制,重點(diǎn)是,此處不是依次相加,而是依次相減,得到的結(jié)果最后加上負(fù)號即為最后運(yùn)算的結(jié)果。
與運(yùn)算

按位或運(yùn)算(|)

或運(yùn)算和與運(yùn)算十分相似,只是依據(jù)的邏輯運(yùn)算不同,或運(yùn)算的依據(jù)邏輯是相同位置有個為1結(jié)果即為1

  • 正數(shù)與正數(shù)的或運(yùn)算:
    舉例:7|9
    二進(jìn)制:7:0111,9:1001
    說明:根據(jù)(1|0=1、1|1=1、0|1=1、0|0=0)可知,7|9的二進(jìn)制形式為:0111|1001,結(jié)果為:15
  • 負(fù)數(shù)與正數(shù)的或運(yùn)算:
    舉例:-7|9
    二進(jìn)制:-7:11111001,9:00001001
    說明:從最左側(cè)的第一個0前的1開始的數(shù),轉(zhuǎn)化為十進(jìn)制,需要進(jìn)行的是依次相減運(yùn)算。
  • 負(fù)數(shù)與負(fù)數(shù)的或運(yùn)算:
    舉例:-5|-8
    二進(jìn)制:-5:11111011,-8:11111000結(jié)果為-5
    說明:運(yùn)算最后結(jié)果的二進(jìn)制形式從最左側(cè)的第一個0前的1開始,直至右側(cè)結(jié)尾,將此數(shù)轉(zhuǎn)換為10進(jìn)制,重點(diǎn)是,此處不是依次相加,而是依次相減,得到的結(jié)果最后加上負(fù)號即為最后運(yùn)算的結(jié)果。
或運(yùn)算

按位取反運(yùn)算符(~)

將二進(jìn)制數(shù)+1之后乘以-1,假如x的二進(jìn)制數(shù)是y,x的按位翻轉(zhuǎn)是-(y+1)
舉例:-3
去反后:2
二進(jìn)制:-3:11111101 取反操作:-(11111101+1)== -(11111110)==2


異或運(yùn)算符(^)

二進(jìn)制對應(yīng)位相加,不進(jìn)位。依據(jù)邏輯為:(1^1=0、1^0=1、0^1=1、0^0=0),同樣依照,如果兩個數(shù)中一正一負(fù),則最后的二進(jìn)制轉(zhuǎn)十進(jìn)制時依次相減,如果同正同負(fù),則相加

  • 正數(shù)和正數(shù)的異或運(yùn)算:
    舉例:7^9
    二進(jìn)制:7:0111,9:1001
    說明:7^9的二進(jìn)制形式為:0111^1001 == 1110,十進(jìn)制為:14
  • 負(fù)數(shù)和正數(shù)的異或運(yùn)算:
    舉例:-3^4
    二進(jìn)制:-3:11111101,4:00000100
    說明:-3^4的二進(jìn)制形式為:11111101^00000100 == 11111001,根據(jù)說明可以知道結(jié)果為-(222-1)== -7
  • 負(fù)數(shù)和負(fù)數(shù)的異或運(yùn)算:
    舉例:-7^-9
    二進(jìn)制:-7:11111001,-9:11110111
    說明;-7^-9的二進(jìn)制形式為:11111001^11110111 == 00001110,根據(jù)說明可以知道結(jié)果為222+2*2+2=14
異或運(yùn)算
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 網(wǎng)站亂碼問題我們會經(jīng)常碰到,大多見于非英文的中文字符或其他字符亂碼,而且,這類問題常常是因為編碼方式問題,主要原因...
    波段頂?shù)?/span>閱讀 3,349評論 1 9
  • 一、ECMAScript 一元運(yùn)算符 一元運(yùn)算符只有一個參數(shù),即要操作的對象或值。它們是 ECMAScript 中...
    耦耦閱讀 596評論 0 0
  • 位運(yùn)算 位運(yùn)算的運(yùn)算分量只能是整型或字符型數(shù)據(jù),位運(yùn)算把運(yùn)算對象看作是由二進(jìn)位組成的位串信息,按位完成指定的運(yùn)算,...
    IIronMan閱讀 8,098評論 0 2
  • 點(diǎn)擊插入->對象->對象(J)... 點(diǎn)擊由文件創(chuàng)建 問我然后怎么辦?當(dāng)然是點(diǎn)擊瀏覽找到那個文件了?。?!笨。。
    symsimmy閱讀 2,162評論 0 0
  • 記 晨之奔跑 此生放蕩不羈愛自由 許一個愿望。奔跑著,在路上,有夢,就不要停。 祈一份祝福。我愛的,愛我的們,新年...
    squirreltree閱讀 789評論 2 3

友情鏈接更多精彩內(nèi)容