天天看點

正負數二進制表示,正負數二進制移位運算、二進制源碼、反碼、補碼

源碼

原碼就是符号位加上真值的絕對值, 即用第一位表示符号, 其餘位表示值. 

[+1] 的原碼 = 0000 0001

[-1] 的原碼 = 1000 0001

第一位是符号位. 因為第一位是符号位, 是以8位二進制數的取值範圍就是:

[1111 1111 , 0111 1111]

[-127 , 127]

反碼

正數的反碼是其本身

負數的反碼是在其原碼的基礎上, 符号位不變,其餘各個位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

補碼

正數的補碼就是其本身

負數的補碼是在其原碼的基礎上, 符号位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)。

[+1] = [00000001]原 = [00000001]反 = [00000001]補

[-1] = [10000001]原 = [11111110]反 = [11111111]補

【-1】  原碼 10000001 反碼11111110 補碼 11111111

【3】   原碼 00000011 反碼 00000011 補碼 00000011

【-127】原碼11111111 反碼 10000000 補碼 10000001

【127】 原碼 01111111 反碼 01111111 補碼 01111111

首先要明白一點,二進制移位操作都是針對存儲在計算機中中二進制的操作,

那麼就要知道,正數在計算機中是用二進制表示的,負數在計算機中使用補碼表示的。

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

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

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

右移操作是将運算數的二進制碼整體右移指定位數,右移之後的空位用符号位補充,如果是正數用0補充,負數用1補充。

public static void main(String[] args) {
		
		System.out.println(3<<2);//3左移2位
		System.out.println(-3<<2);//-3左移2位
		
		System.out.println(6>>2);//6右移2位
		System.out.println(-6>>2);//-6右移2位
		   
	}
           
12
-12
1
-2
           

解釋:

1>

3 正數,在計算機中用二進制表示

00000000 00000000 00000000 00000011

00 00000000 00000000 00000000 00001100   左移兩位右邊補00  結果為12   2 的3次方 + 2的2次方 = 12

2>

-3 負數 ,在計算機中用二進制補碼表示

求-3的補碼,根據上面的方法  負數的補碼是在其原碼的基礎上, 符号位不變, 其餘各位取反, 最後+1.

10000000 00000000 00000000 00000011   -3源碼

11111111 11111111 11111111 11111100   -3反碼

11111111 11111111 11111111 11111101   -3補碼

11 11111111 11111111 11111111 11110100  左移兩位右邊補00    

這個數第一位是1 說明是個負數,那就是某個負數的補碼。求出源碼就能知道是哪個負數

11111111 11111111 11111111 11110011   減一,取得反碼

10000000 00000000 00000000 00001100   第一位不變,其他為取反。得到 源碼。

是以此負數為 -12

3>.

6 為正數,在計算機中顯示二進制

00000000 00000000 00000000 00000110   6的源碼

00000000 00000000 00000000 00000001   右移兩位,正數右移,左邊補0 。

是以答案為 1

4> .

-6  位負數,在計算機中應該顯示補碼

00000000 00000000 00000000 00000110   6 的源碼

負數的補碼是在其原碼的基礎上, 符号位不變, 其餘各位取反, 最後+1

求出補碼

11111111 11111111 11111111 11111010  -6 的補碼

負數右移,左邊空缺用1補充

11111111 11111111 11111111 11111110   此為答案數字的補碼。是個負數

求此負數源碼

10000000 00000000 00000000 00000010  此為答案 -2

繼續閱讀