1.表格比較:
2.轉換成二進位:
java用byte位元組來表示二進位,因為byte有8位,而int有32位,所以int轉成二進位應該去掉高位儲存最低的8個位,如下代碼:
public static byte[] intToBytes( int value ) { byte[] src = new byte[4];src[3] = (byte) ((value>>24) & 0xFF);src[2] = (byte) ((value>>16) & 0xFF);src[1] = (byte) ((value>>8) & 0xFF); src[0] = (byte) (value & 0xFF);for (byte b : src) {System.out.println(b);}return src; }
int是4位元組,所以所以轉成byte肯定是位元組數組,其他幾種類型可參照int,具體差不多
3.java移位元運算:
左位移低位補碼,有位移高位補碼,如:右位移500>>24意思是左邊補上24個0,然後從左向右取32位是得到的結果;左位移是右邊補0,從右向左算
這是對無符號的,有符號暫時不清楚,待補。。。。。。
4.二進位與位元組:
byte表示的範圍是-128——127,最高位0表示正,1表示負,所以是2^7 - 1
概念:java中用補碼錶示位元,補碼的最高位是符號位,最高位為“0”表示正數,最高位為“1”表示負數。
正數補碼為其本身;
負數補碼為其絕對值各位取反加1;
例如:
+21,其二進位表示形式是00010101,則其補碼同樣為00010101
-21,按照概念其絕對值為00010101,各位取反為11101010,再加1為11101011,即-21的二進位表示形式為11101011
步驟:
1、byte為一位元組8位,最高位是符號位,即最大值是01111111,因正數的補碼是其本身,即此正數為01111111
十進位表示形式為127
2、最大正數是01111111,那麼最小負是10000000(最大的負數是11111111,即-1)
3、10000000是最小負數的補碼錶示形式,我們把補碼計算步驟倒過來就即可。10000000減1得01111111然後取反10000000
因為負數的補碼是其絕對值取反,即10000000為最小負數的絕對值,而10000000的十進位表示是128,所以最小負數是-128
4、由此可以得出byte的取值範圍是-128到+127
5、說明:各個類型取值範圍的計算方法與此大致相同,感興趣的同學可以自己試著計算
補充(給非電腦專業的同學掃下盲):
在電腦內,定點數有3種標記法:原碼、反碼和補碼
[原碼]就是二進位定點標記法,即最高位為符號位,“0”表示正,“1”表示負,其餘位表示數值的大小。
[反碼]標記法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
[補碼]標記法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
所以System.out.println((byte)170);的結果是-86
170的二進位是10101010,取反是1010101,表示的十進位是85,然後加1,因為最高位是1代表負數所以結果是-86