學習動機:資料有時也需轉換成2進制處理 所以也是要有點進制觀念喔
我們已經知道電腦是用2進位來運算了,網頁資料庫儲存媒體資料也是如此 雖然這次沒有要用DB,但要了解bin檔案的操作仍要學習各種常用轉制。
1bit == 1位元(16進制A~F或數字) , 1byte == 8bit(可存文字編碼)
0b數值 == bin() == 2進位制
0o數值 == oct() == 8進位制
0x數值 == hex() == 16進位制
數值 == int() == 10進位制
有個數值 0b110 = int(6) , 二補數換算後: -0b111 = int(-7)
以下是2補數在8位元(1byte) 的範圍:
0 1 1 1 1 1 1 1 = 127
0 0 0 0 0 0 1 0 = 2
0 0 0 0 0 0 0 1 = 1
0 0 0 0 0 0 0 0 = 0
1 1 1 1 1 1 1 1 = −1
1 1 1 1 1 1 1 0 = −2
1 0 0 0 0 0 0 1 = −127
1 0 0 0 0 0 0 0 = −128
Ex:(2補數運算) 2's = ~x
print(~0b10) #2s
print(~0o2) #8s
print(~0x2) #16s
print(~2) #10s
print(~0xFFF)
print(~0o777) #先轉2s在轉回來
print(bin(~999)) #10 to 2
print(hex(0b100110)) #2 to 16
print(int(0xABC)) #16 to 10
原來程式原始的運算都是透過2進制來運算,所以其他進制的2補數當然也是轉2進位直接處理
資料移位,是資料做不同介面處理的方法 透過位移資料來完成儲存與讀取
軟體就用在資料的替換加密, 但要小心別溢位(資料損失或錯誤)
而程式的位移就可以改善程式執行高重複迴圈問題。尤其用在單晶片8051 , arduino最明顯,單晶片運算記憶體小 所以用來顯示led迴圈控制可用位移代替
print(bin(0b0110>>2)) #溢位
print(bin(0b0110<<2)) #無溢位有進位 ,成功位移
print(0x3CA<<2)
print(0xAD15F>>10) #是否資料損失?
print(len(bin(0xAD15F))) #可知0不夠位移 位移一定錯誤
真實狀況:圖片處理位移時被邊框吃掉
整理2進運算子:
& AND
| OR
^ XOR
~ 取2補數
<< 左移
>> 右移