原始碼:正數的補碼與原碼相同例+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 ...