python中的位運算
㈠ python之運算符匯總
1.算數運算符
假設 a= 10, b = 20
2.比較運算符
相關推薦:《Python視頻教程》
3.賦值運算符
4.邏輯運算符
邏輯運算的順序排列:從左往右開始執行
() > not > and > or
and or 一真一假
都為真: 取後面的 取前面的 取假的
都為假: 取前面的 去後面的 取真的
not True: False
not False: True
5.成員運算符
in -- 存在
not in -- 不存在
㈡ Day3_進制字元串位運算
計算機在存儲數據時候都是以二進制的形式去存的
十進制、十六進制、八進制、二進制
基數:0,1,2,3,4,5,6,7,8,9
進位;鋒十進一
每一位的值:123 = 1 100 + 2 10 + 3*1
基數:0,1
所有的二進制數都是由0和1組成
進位:逢二進一
每一位的值:11011 = 1 2^0+1 2 1+0*2 2+1 2^3+1 2^4 = 27
基數:0,1,2,3,4,5,6,7
進位:逢8進1
每一位的值:111 = 1 8^0+1 8 1+1*8 2 = 73
基數:0-9,a-f(A-F) a,b,c,d,e,f
進位:逢16進1
每一位的數:111 = 1 16^0+1 16 1+1*16 2 =273
5.進制之間的轉換
python支持通過二進制、八進制、十進制和十六進制的形式來直接表示整數
oct(整數)--> 將括弧中的整數,轉換成八進制形式
hex(整數)--> 將括弧中的整數,轉換成十六進制形式
計算機在存數字的時候,存的是數字的二進制的補碼
計算機內存的最小單位是位,1位只是存儲兩個狀態
8位 = 1位元組
十進制的10的原碼就是:1010
最高位是符號位,如果正數符號位為0,負數符號位為1
10的原碼 00000000 00001010
-10的原碼 10000000 00001010
正數的反碼是它的原碼
負數的反碼就是這個數的原碼符號位不變的,然後其他位置上的數字取反
10 -> (原碼)10000000 00001010 ——>(反碼)11111111 11110101
正數的補碼就是它的原碼
負數的補碼是它的反碼加1
-10 -> (反碼)11111111 11110101 -> (補碼)11111111 11110110
總結:正的反碼和補碼都是原碼;負數的補碼是反碼加1,反碼就是原碼符號位不變,其他位取反
為什麼計算機存儲數據的時候存補碼?:因為計算機中只有加法器,只能進行加操作
存原碼對負數進行加操作的時候有問題
計算機存數字存補碼,計算的時候也是補碼,最後結果看的時候看原碼
位運算符:&(按位與),|(按位或), ^(異或), ~(取反),>>(右移), <<(左移)
數字1 & 數字2 :二進制的每一位,兩個都為1結果才是1,否則為0
作用:讓指定位上數置零,或者保留夢一位上的值
數字1 | 數字2:只要有一個為1,結果就是1;兩個都為0,結果才是0
-3 | 2--> 11111101 | 00000010 == 11111111(補碼) == 100000001(原碼)
數字1 ^ 數字2:不同為1,相同為0
-3 ^ 2--> 11111101 ^ 00000010 == 11111111(補碼) == 100000001(原碼)
~數字: 將每一位取反
數字 << 位數 :將補碼移動指定位數,後面用零補齊
左移特點 : 結果 == 數字 2^位數 m << n == m (2^n)
num * 2 == num << 1 num * 4 == num << 2
數字 >> 位數:將補碼向右移動指定的位數,符號位不變,在符號位的後面補指定個數的0(正)或者1(負)
規律(只適用於正數): m >> n == m // (2^n)
python中通過單引號或者雙引號引起來的字元集就是字元串
字元串中引號中的字元集,就是由各種不同的字元來組成
python中字元串中字元採用的是Unicode編碼
Unicode編碼,是通過兩個位元組來對一個字元進行編碼。0 ~ 2^16-1
幾乎包含了世界上所有字元
ASSCII編碼:是通過一個位元組對一個字元編碼
Unicode編碼包含ASSCII編碼表
chr(數字):獲取數字在Unicode編碼表中對應的字元,返回的是只有一個字元的字元串
可以直接在字元串中寫字元對應的編碼值,格式:u十六進制編碼
一些特殊功能或者具有特殊意義的字元,直接放在字元串的引號中無效,需要通過來轉移
---> 換行
'--->'
---> 製表符(四個空格)
--->
"--->"
㈢ python中 b1=m|n^p是什麼意思
這是位運算的結果吧。
雖然我對python中的位運算理解的不深刻,但這應該就是位運算並且賦值給b1.你可以查看與位運算相關的資料。
㈣ 轉《python 位操作符 左移和右移 運算》
左移和右移N位等同於無溢出檢查的2的N次冪運算:2**N
運算規則:
按二進制形式把所有的數字向左移動對應的位數,高位移出(舍棄),低位的空位補零。
語法格式:
需要移位的數字<<移位的位數
例如:3<<2則是將數字3左移動2位
計算過程:
3<<2首先把3轉換為二進制數字
然後把該數字高位(左側)的兩個零移出,其他的數字都朝左平移2位,最後在低位(右側)
的連個空位補零。則得到的結果是,
則轉換為十進制是12
運算規則:
按二進制形式把所有的數字向右移動對應的位數,低位移出(舍棄),高位的空位補符號位
即正數補0,負數補1
語法規則:
需要移位的數字>>移位的次數
例如:11>>2則是將數字11右移2位
計算過程:
11的二進制形式為:然後把低位的最
後兩個數字移出,因為該數字是正數,所以在高位補0,則得到的最終的二進制結果為:
轉換為十進制數為3
轉自 https://blog.51cto.com/wangyan112/1320143 。
㈤ python中「>>=」和「<<=」符號是什麼意思
>> 和 <<都是位運算,對二進制數進行移位操作。
<< 是左移,末位補0,類比十進制數在末尾添0相當於原數乘以10,x<<1是將x的二進製表示左移一位,相當於原數x乘2。比如整數4在二進制下是100,4<<1左移1位變成1000(二進制),結果是8。
>>是右移,右移1位相當於除以2。
而>>=和<<=,就是對變數進行位運算移位之後的結果再賦值給原來的變數,可以類比賦值運算符+=和-=可以理解。
比如x>>=2, 就是把變數x右移2位,再保留x操作後的值。
㈥ Python運算符優先順序規則有哪些
以下運算符優先順序順序依次遞增:
Lambda#運算優先順序最低
邏輯運算符:or
邏輯運算符:and
邏輯運算符:not
成員測試:in,notin
同一性測試:is,isnot
比較:<,<=,>,>=,!=,==
按位或:|
按位異或:^
按位與:&
移位:<<,>>
加法與減法:+,-
乘法、除法與取余:*,/,%
正負號:+x,-x
㈦ python 位操作 取反問題
python 3的整型以16bit遞增。
0xf0 =0b 0000 0000 1111 0000
~0xf0之後得到1111 11110000 1111
[1][111 11110000 1111]
確定是負數,有負數等於絕對值反碼加一。求補碼形式。
絕對值減1得:111 11110000 1110
反碼得:000 0000 1111 0001
得-0xf1即-241(你那的~a[0]得-241)
要求得到[0,256),限定一下范圍即可。
>>>(~a[0])&0xff
15
㈧ python中常用的運算符
python常見的運算符
1.算數運算符
算術運算符用於執行加減乘除、取余等基本數學運算,其中為了方便輸入用斜杠"/"表示除號。和其它編程語言中兩個整數相除結果為整數不同,Python中兩個整數相除結果為小數,如果需要獲取整除結果則需要使用兩個斜杠"//"。Python中用兩個「*」號表示求冪,例如 2**3=8,3**2=9。
①+ 名稱:加
可用於對數字,序列等數據操作 。對於數字進行求和;其他的是連接
②- 名稱 :減 只是求差
③* 名稱:乘法
可用於數字、序列等數據進行操作;數字是求積;其他類型進行連續性的操作
④/ 名稱:除法 求商
⑤% 名稱:取余 求兩個數字除法運算的余數
⑥** 名稱:冪 求a的b次冪
⑦// 名稱:地板除法 求商取整
2.關系運算符
關系運算符用於比較兩個操作數之間的大小關系,返回值為True或False。
① == 名稱:等於 ② != 不等於 ③ > 大於 ④ < 小於 ⑤ <= 小於等於 ⑥ >= 大於等於
注意:1. 一個=表示賦值,兩個==表示判斷兩個對象是否相等
2.關系運算符可以連用
3.邏輯運算符
邏輯運算符用於判斷多個條件是否滿足某一要求。與其他編程語言不同的是:Python中用 not 表示邏輯非,and 表示邏輯與, or 表示邏輯或。
① and 名稱:邏輯與 只有當and兩邊的之都為 True時,結果為True,否則結果均為False
② or 名稱:邏輯或 只有當or兩邊的之都為False時,結果為False,否則結果均為True
③not 名稱:邏輯非 結果與原來的結果相反,總是。
注意:邏輯與和了邏輯或在進行求解期間 ,總是從左到右一次執行 ,如果在某一步可以確定結果,那麼將不在執行後面的表達式。
4.賦值運算符
運算符 += -= *= /= %= **= //= &= |= ^= <<= >>=
名稱 加賦值 減賦值 乘賦值 除賦值 取余賦值 冪賦值 地板除法賦值 位與賦值 位或賦值 位異或賦值 左移賦值 右移賦值
例子 a +=b a -= b a *= b a /= b a %= b a **= b a //= b a &= b a |= b a ^= b a <<= b a >>= b
說明 a = a + b a = a - b a = a * b a = a / b a = a % b a = a ** b a = a // b a = a & b a =a | b a = a ^ b a = a << b a = a >> b
5.身份運算符
in 例子:x in y 表示y中是否含有x,如果有則返回True,沒有責則返回False
not in 例子: x not in y 表示y中是否含有,沒有返回位True,有返回False
㈨ 我想問下python中 邏輯與:「&」和「and」的區別
1、「&」和「and」有本質區別,屬於不同類型的運行符號。& 是位運算;and 是邏輯運算。
2、首先是&:該運輸符屬於字元串的連接運算符,例如,「w「&」c「結果為字元串」wc「。
3、and屬於邏輯運算符,表示邏輯與運算,其規則是有假取假,全真為真。例如,true and false結果為false,true and true結果為true。
(9)python中的位運算擴展閱讀
Python的設計哲學是「優雅」、「明確」、「簡單」。因此,Perl語言中「總是有多種方法來做同一件事」的理念在Python開發者中通常是難以忍受的。Python開發者的哲學是「用一種方法,最好是只有一種方法來做一件事」。
在設計Python語言時,如果面臨多種選擇,Python開發者一般會拒絕花俏的語法,而選擇明確的沒有或者很少有歧義的語法。
由於這種設計觀念的差異,Python源代碼通常被認為比Perl具備更好的可讀性,並且能夠支撐大規模的軟體開發。這些准則被稱為Python格言。在Python解釋器內運行import this可以獲得完整的列表。
Python開發人員盡量避開不成熟或者不重要的優化。一些針對非重要部位的加快運行速度的補丁通常不會被合並到Python內。所以很多人認為Python很慢。
不過,根據二八定律,大多數程序對速度要求不高。在某些對運行速度要求很高的情況,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。
Python是完全面向對象的語言。函數、模塊、數字、字元串都是對象。並且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。
Python支持重載運算符和動態類型。相對於Lisp這種傳統的函數式編程語言,Python對函數式設計只提供了有限的支持。有兩個標准庫(functools, itertools)提供了Haskell和Standard ML中久經考驗的函數式程序設計工具。
雖然Python可能被粗略地分類為「腳本語言」(script language),但實際上一些大規模軟體開發計劃例如Zope、Mnet及BitTorrent,Google也廣泛地使用它。
Python的支持者較喜歡稱它為一種高級動態編程語言,原因是「腳本語言」泛指僅作簡單程序設計任務的語言,如shellscript、VBScript等只能處理簡單任務的編程語言,並不能與Python相提並論。
Python本身被設計為可擴充的。並非所有的特性和功能都集成到語言核心。Python提供了豐富的API和工具,以便程序員能夠輕松地使用C語言、C++、Cython來編寫擴充模塊。Python編譯器本身也可以被集成到其它需要腳本語言的程序內。
因此,很多人還把Python作為一種「膠水語言」(glue language)使用。使用Python將其他語言編寫的程序進行集成和封裝。在Google內部的很多項目,例如Google Engine使用C++編寫性能要求極高的部分,然後用Python或Java/Go調用相應的模塊。
《Python技術手冊》的作者馬特利(Alex Martelli)說:「這很難講,不過,2004 年,Python 已在Google內部使用,Google 召募許多 Python 高手,但在這之前就已決定使用Python,
他們的目的是 Python where we can, C++ where we must,在操控硬體的場合使用 C++,在快速開發時候使用 Python。」