1. 程式人生 > >JAVA中負數轉二進位制分析

JAVA中負數轉二進位制分析

最近在看集合原始碼,發現ArrayDeque裡面用到了大量的&運算,這牽扯到了二進位制。突然發現自己對負數的二進位制有點模糊了,對此進行了一些支援補充。

首先我們要對原碼、反碼和補碼有個瞭解:

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、對反碼加一,獲取補碼。

作者:佇望碧落 出處:http://blog.csdn.net/cl05300629