1. 程式人生 > 其它 >資料寬度和邏輯運算

資料寬度和邏輯運算

資料寬度

計算機資料

無符號數:正數
有符號數:正數、負數
當資料寬度為32位時:
無符號數00000000-FFFFFFFF
有符號數00000000-7FFFFFFF(正數)
80000000-FFFFFFFF(負數)
也就是 0正 1負

幾個重要的計量單位

BYTE 位元組 8位 1位元組

WORD 位元組 16位 2位元組

DWORD 雙字 32位 4位元組

邏輯運算

或運算(or|)

只要有一個為1則結果 為1

與運算(and&)

兩個數都是1才為1

異或運算(xor^)

相同為0 不同為1

非運算(not!)

取反 1取反就是0 0取反就是1

cpu如何計算2+3?

X:0010
y:0011
先異或:
0010
xor 0011

    0001

R(暫存器中):0001
異或完以後要判斷是否運算結束
將兩個數進行與運算然後左移一位
0010
and 0011

    0010

0010<<1 ==0100
如果結果全為0,結果則為我們所要的結果
否則,把上面的異或得到的值賦值到X中
把左移後的結果賦值到Y
X:0001
Y:0100
重複以上的操作(先異或,在與運算)
先異或
0001
xor 0100

    0101

R:0101
在將兩個數進行與運算 然後左移動一位
0001
and 0100

0000

左移完結果全是0,結果為我們所需要的
最終結果為0101 = 5

CPU如何計算2-3?

X:0010
Y:1101( 3的二進位制為0011取反1100加一為補碼1101)
先異或:
0010
xor 1101

       1111

R:1111
兩個數再進行與運算,然後左移一位
0010
and 1101
----------
0000
0000<<1=0000
如果權為0,結果為我們所要的結果
最終結果為1111= -1

在計算機中

正數是直接用原碼錶示的
負數時以其正值的補碼形式表示的
下面資料以資料寬度為8為例
1的原碼:0000 0001
1的反碼:1111 1110
1的補碼:1111 1111

同理可得:
8的原碼:0000 1000
8的反碼:1111 0111
8的補碼:1111 1000
即1111 = -1