彙編之簡單的二進位制(狂神說之簡單的二進位制)
阿新 • • 發佈:2020-12-24
彙編之簡單的二進位制(狂神說之簡單的二進位制)
資料寬度
- 位 0 1
- 位元組 0-0xFF
- 字 0-0xFFFF
- 雙字 0-0xFFFFFFFF
- 在計算機中,每一個數據都需要給它定義型別,給它定義寬度,在記憶體中的寬度。4
有符號數無符號數
無符號數規則
你這數字是什麼,那就是什麼
1 0 0 1 1 0 1 0 十六進位制:0x9A 十進位制:154
有符號數規則
最高位是符號位:1(負數) 0(正數)
原碼反碼補碼
- 有符號數的編碼規則
原碼:最高位符號位,對齊它的位進行本身絕對值即可
反碼:
正數:反碼和原碼相同
負數:符號位一定是1,其餘位對原碼取反
補碼:
正數:補碼和原碼相同
負數:符號位一定是1,反碼+ 1
測試 測試都基於位是8位
如果是正數,原碼反碼補碼都是一樣的(1)
原碼: 0000 0001
反碼: 0000 0001
補碼: 0000 0001如果是負數(-1)
原碼: 1000 0001
反碼: 1111 1110
補碼: 1111 1111 (負數則在反碼的基礎上+1)
位運算
與運算(and &)兩個都為1,結果為1
1011 0001
1101 1000
---------------與運算
1001 0000
或運算(or |)只要有一個1,結果就為1
1011 0001
1101 1000
---------------或運算
1111 1001
異或運算 (xor ^)不一樣就是1
1011 0001
1101 1000
---------------異或運算0110 1001
非運算(單目運算子 not ~)0就是1,1就是0
1101 1000
0010 0111
位運算(移動位 左移*2 右移/2)
位運算在計算機中遠比加法要快
左移(shl <<)
0000 0001 所有二進位制位全部左移若干位,高位丟棄,低位補0
0000 0010右移(shr >>)
0000 0001 所有二進位制位全部右移若干位,低位丟棄,高位補0,1(根據符號位決定)
0000 0000
位運算的加法
4+5
# 計算機加法
0000 0100
0000 0101
----------加法,計算機只有與或非..
0000 1001
#第一步:異或:如果不考慮進位,異或就可以直接得出結果集
0000 0100
0000 0101
------------
0000 0001
#第二步:與運算(判斷進位,如果與運算結果集為0,沒有進位)
0000 0100
0000 0101
-----------
0000 0100
#第三步:將與運算得結果左移一位 讀位的結果 0000 1000
#第四步:將移位後的結果與第一步異或出來的結果進行異或運算
0000 0001
0000 1000
-----------
0000 1001
#第五步:與運算判斷第四步的兩個數有沒有進位,如果運算結果為0,沒有進位
#所以最終的結果就是與運算為0的結果集的上一個異或預算的結果集
特別鳴謝
本篇文章完全採集於【狂神說】最通俗易懂的計算機底層教學,二進位制到彙編學習!:https://www.bilibili.com/video/BV1ni4y1G7B9?p=1