1. 程式人生 > >java 二進位制與負數互相轉化

java 二進位制與負數互相轉化

負數表示
首先我們要對原碼、反碼和補碼有個瞭解:
1、所謂原碼就是二進位制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
2、反碼錶示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
原碼10010= 反碼11101 (10010,1為符號碼,故為負)
(11101) 二進位制= -13 十進位制
3、補碼錶示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
舉一例,我們來看整數-1在計算機中如何表示。
假設這也是一個int型別,那麼:
1、先取1的原碼:00000000 00000000 00000000 00000001
2、得反碼: 11111111 11111111 11111111 11111110
3、得補碼: 11111111 11111111 11111111 11111111

十六進位制表示: 0xFFFFFFFF

所以Java中Integer.toBinaryString(-5)結果為11111111111111111111111111111011. Integer是32位(bit)的.

負數轉二進位制規律:

1、取負數的絕對值的原碼;

2、計算原碼的反碼;

3、對反碼加一,獲取補碼。

3轉為二進位制
3
0011
1100
1101

二進位制負數(開頭為1)轉為十進位制負數
1、 對二進位制減一
2、 對此數取反碼
3、 得到此數的十進位制

1101
1100
0011
3

java 二進位制與十進位制互相轉化

		 int num=3;
    	String s=Integer.toBinaryString(num);	
    	//負數轉十進位制
    	BigInteger bi = new BigInteger(num);
		bi.toString(2);


    	int a=Integer.valueOf(s,2);
    	//當二進位制位負數時
    	BigInteger bi = new BigInteger(s., 2);
    	return bi.intValue();