邏輯運算與移位運算

2021-09-01 14:01:50 字數 1603 閱讀 9532

原始碼:正數的補碼與原碼相同例+7 原始碼:00000111 補碼 :00000111  (用8位二進位制表示乙個數)

負數的補碼:

符號位為1,其餘位為該數絕對值的原碼按位取反;然後整個數加1。

-7 原始碼: 10000111 ,其絕對值為00000111 取反加一:11111001 為-7補碼

已知乙個數的補碼,求原碼的操作分兩種情況:

(1)如果補碼的符號位為「0」,表示是乙個正數,其原碼就是補碼。 

(2)如果補碼的符號位為「1」,表示是乙個負數,那麼求給定的這個補碼的補碼就是要求的原碼。

補碼:00001111 ->原碼:00001111

補碼:11110001 -> 01110001 取反加一 -> 原碼:10001111

邏輯運算:異或("^")

其運算法則為: a^b=(a' and b) or (a and b') (a'為非a)

0 ^ 1 得 1, 1 ^ 1 得 0 ,0 ^ 0 得 0,1 ^ 0 得 1

左移位:<<,有符號的移位操作

左移操作時將運算數的二進位製碼整體左移指定位數,左移之後的空位用0補充

右移位:>>,有符號的移位操作

右移操作是將運算數的二進位製碼整體右移指定位數,右移之後的空位用符號位補充,

如果是正數用0補充,負數用1補充。

system.out.println(3<<2);//3左移2位 0000 0011 ==> 000000 1100

system.out.println(-3<<2);//-3左移2位 1000 0011 ==> 1000 001100

system.out.println(6>>2);//6右移2位 0000 0110 ==> 0000 0001|10

system.out.println(-6>>2);//-6右移2位

1000 0110--->0000 0110(絕對值)--> 1111 1010(補碼)-->1111 1110 |10

--> 1111 1110

求1111 1110的原始碼--> 0111 1110--> 1000 0010--> -2

無符號的移位「>>>」:無符號的移位只有右移,沒有左移使用「>>>」進行移位,都補充0

system.out.println(6>>>2); //1

system.out.println(-6>>>2); //1073741822

00000000 00000000 00000000 00000110 +6在計算機中表示方法

11111111 11111111 11111111 11111001

11111111 11111111 11111111 11111010 -6(補碼)在計算機中的表示

0011111111 11111111 11111111 11111010 右移兩位,補充0,結果為1073741822

8086邏輯運算和移位

一 邏輯運算指令and or not xor test 與,或,非,異或,測試 與,或,非,異或 這邊大家都知道,這裡不在重複,舉幾個例子 and ax,1000h ax中的16位數和1000h相與,結果送到ax中。or ax,00f0h ax中的值與00f0相或,結果在ax中 not al al中...

邏輯位運算與邏輯運算

兩者非常容易混淆,其實這是截然不同的兩種運算.1.邏輯位運算 與運算 1 2 0 0000 0001 0000 0010 0000 0000 0 或運算 1 2 3 0000 0001 0000 0010 0000 0011 3 按位求反 運算,異或 運算略.移位 左移,右移 運算略.2.邏輯運算 ...

邏輯運算與位運算

1.邏輯運算 邏輯運算又稱布林運算,它的結果應該是乙個真假值,也就是true還是false。1 與運算,同為真時才為真。2 或運算,同為假時才為假,也就是說有乙個為真即為真。3 非運算,true false,false true。4 異或運算,按照每一位進行異或,相同為0,不同為1。2.位運算 1 ...