bit(位):數據存儲的最小單元。在計算機二進制系統中,位,簡記爲b,也稱爲比特(bit),每一個二進制數字0或1就是一個位(bit),其中每 8bit = 1 byte(字節);學習
Java 中的int數據類型佔4個byte(字節),而1 byte(字節) = 8 bit(位);(說白了,在二進制系統中是以bit 做爲數據存儲單元的)spa
二進制在計算機技術中普遍應用。二進制數用0和1兩個數字及其組合來表示任何數,二進制的進位規則是:「逢2進1」。數字1在不一樣的位上表明不一樣的值,按從右至左code
的次序,這個值以2倍遞增。orm
在計算器中參與運算的數有兩大類:無符號數和有符號數htm
(1)有符號數:get
對於有符號數而言,符號的正、負機器是沒法識別的,但因爲「正、負」剛好是兩種大相徑庭的狀態,若是用「0」表示「正」,用「1」表示「符」,這樣符號也被數字化了,it
而且規定將它放在有效數字的前面,即組成了有符號數。因此,在二進制中使用最高位(第一位)來表示符號,最高位是0,表示正數;最高位是1,表示負數。
class
(2)無符號數:變量
無符號數是針對二進制來說的,無符號數的表數範圍是非負數。所有二進制均表明數值(全部位都用於表示數的大小),沒有符號位。即第一個"0"或"1"不表示數據類型
正負。
例子:
(1)在Java中int數據類型是怎麼在計算機中表示的呢?
在二進制系統中是以bit(位)來做爲數據存儲單元的(詳細內容請看前言),假設 int number = 1 ,那麼number在計算機系統中將表示以下:
00000000 00000000 00000000 00000001
同理可得,number=-1 時,在二進制中表示以下:
10000000 00000000 00000000 00000001
注意:最高位(第一位)是符號位,由於是number值爲1是一個正數,因此最高位爲0;
(2)二進制轉十進制?
要從右到左用二進制的每一個數去乘以2的相應次方(次方要從0開始算起);
假如:二進制數1101轉化成十進制 ,那麼 1101 = 1*20+0*21+1*22+1*23 = 1+0+4+8 = 13;
注意:任何數的0次方都是1。
對於有符號數而言:
(1)二進制的最高位是符號位:0表示正數,1表示負數
(2)正數的原碼、反碼、補碼都同樣;
(3)負數的反碼 = 它的原碼符號位不變,其餘位取反(0 ->1 ; 1->0 );
(4)負數的補碼 = 它的反碼 +1;
(5)0的反碼、補碼都是0;
(6)在計算機運算的時候,都是以補碼的方式來運算的;
例子:
下面咱們就使用「有符號數」來模擬一下,在計算機中是怎樣運算的。
(1)正數相加:
例如:1+1 ,在計算機中運算以下:
1的原碼爲:
00000000 00000000 00000000 00000001
由於「正數的原碼、反碼、補碼都同樣」,因此,1的補碼 = 1的原碼,因此 1的補碼+ 1的補碼 就等於:
00000000 00000000 00000000 00000001
+
00000000 00000000 00000000 00000001
=
00000000 00000000 00000000 00000010
00000000 00000000 00000000 00000010( 轉換爲10進制) = 0*2^0 + 1*2^1 = 0 + 2 =2
(2)正數相減:
例如:1-2,在計算機中運算以下:
在計算機中減運算實際上是做爲加運算來操做的,因此,1-2 = 1 + ( -2 )
第一步:把 1補碼找出來(由於正數的原碼、反碼、補碼都同樣,因此咱們可經過原碼直接獲取補碼):
1的補碼:
00000000 00000000 00000000 00000001
第二步:把-2的原碼找出來:
-2的原碼:
10000000 00000000 00000000 00000010
第三步:把-2的反碼找出來:
-2的反碼:
11111111 11111111 11111111 11111101
第三步:把-2的補碼找出來:
-2的補碼:
11111111 11111111 11111111 11111110
第四步:1的補碼與-2的補碼相加:
00000000 00000000 00000000 00000001
+
11111111 11111111 11111111 11111110
=
11111111 11111111 11111111 11111111
第五步:將計算結果的補碼轉換爲原碼,反其道而行之便可(若是想將二進制轉換爲十進制,必須獲得二進制的原碼)
補碼:11111111 11111111 11111111 11111111
=
反碼:11111111 11111111 11111111 11111110
=
原碼:10000000 00000000 00000000 00000001
第六步:將計算結果的二進制原碼 轉換 爲十進制
二進制原碼:10000000 00000000 00000000 00000001 = 1*2^0 = -1
這句話,還有點爭議。在Java中char類型是:16位Unicode字符,取值範圍 0 ~ 65535 , 不存在負數範圍,從這點上說:"char類型就是一個
無符號數";
(1)正數的原碼、反碼、補碼都同樣;
(2) 若是想將 二進制 轉爲 十進制,必須使用 二進制的原碼;
學習了關於」二進制「的知識後,下面 ,咱們將學習Java中」位運算符「與」移位運算「!