今天在里人和同學一起學習了學校的python教程,發現很多同學對位運算那一部分知識不是很理解,我想通過剛剛學習的計算機組成原理的知識給大家解釋一下哈哈哈哈,
之前大佬有直播過,在計算機中,數字是通過二進制補碼來表示的,簡單的說,是把十進制轉化成0001010010這樣的二進制串,而計算機表示數字的最小單元應該是位元組,一般來說,一個位元組包括了八位01數字,

所謂位運算,即對這八個01數字位進行邏輯運算,那么我通過一個代碼簡單的說明一下位運算的含義(我不是大佬,可能說的不是很標準,請見諒)
def yu(a,b): #定義一個與運算函式引數位ab
c = a&b#c用來存盤a與b的結果
if c == 1:#判斷c的真偽
return True
if c == 0:
return False
print(yu(1,1))(計算1與1 的邏輯
這是一個與或非運算的簡單模板,將符號&與進行替換,可以得到或非等簡單邏輯運算,
上述代碼的輸出大家可以自己測驗一下,
下面簡單介紹一下按位取反操作
print(~0)
這是一個非常簡單的例子,輸出結果位-1
-1和0 有什么關系呢,其實我們可以從計算機內部的運算開始理解,我們知道計算機通過數字的補碼進行存盤和計算,0的補碼是00000000,其實在原碼和反碼中,0是可以分為+0和-0的,感興趣的同學可以去借一本計算機組成原理看看,

將00000000按位取反后變成了11111111,顯然最高位是1代表一個負數,根據補碼的定義可以計算出,這是-1的補碼,故答案是-1,(計算結果感興趣的話加我好友問吧哈哈哈)
這也驗證了位運算是對位元組中的每一個位進行邏輯運算,
最后,舉一個移位運算的例子我就要去復習六級了嗚嗚嗚,
def zuoyi(a):
a=a<<1
return a
def youyi(a):
a=a>>1
return a
print(zuoyi(128))
print(youyi(128))
輸出的結果分別是256和64,是不是驚喜的發現一個是乘2,一個是除二,其實這個例子很特殊,128剛好是2的七次方也就是10000000,那么左移一位是100000000右移一位是01000000,轉化為10進制后就可以看出答案了,對比十進制,左移一位乘10,右移一位除以十,是不是有感覺了,可以發現一個小結論,二進制中,左移一位乘以2,右移一位除以2,不過也有可能要考慮溢位的情況這個我們這次先不聊,
那么這就是我今天的學習感想了,講錯了大佬別打我哈哈哈,拜拜啦下期再見,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/60654.html
標籤:其他
上一篇:自動化辦公之excel教程(4):使用藝術字,圖片,圖形美化作業表
下一篇:OSI 7層的簡單講解
