1. 程式人生 > 其它 >彙編之簡單的二進位制(狂神說之簡單的二進位制)

彙編之簡單的二進位制(狂神說之簡單的二進位制)

技術標籤:學習筆記補碼

彙編之簡單的二進位制(狂神說之簡單的二進位制)

資料寬度

  • 位 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