javabyteint轉換
⑴ 求java編程 位元組byte怎麼轉換成整形int
有點困,沒精神給你細解釋,參考
1.byte的大小為8bits而int的大小為32bits
2.java的二進制採用的是補碼形式
在這里先溫習下計算機基礎理論
byte是一個位元組保存的,有8個位,即8個0、1。
8位的第一個位是符號位,
也就是說0000 0001代表的是數字1
1000 0000代表的就是-1
所以正數最大位0111 1111,也就是數字127
負數最大為1111 1111,也就是數字-128
上面說的是二進制原碼,但是在java中採用的是補碼的形式,下面介紹下什麼是補碼
1、反碼:
一個數如果是正,則它的反碼與原碼相同;
一個數如果是負,則符號位為1,其餘各位是對原碼取反;
2、補碼:利用溢出,我們可以將減法變成加法
對於十進制數,從9得到5可用減法:
9-4=5 因為4+6=10,我們可以將6作為4的補數
改寫為加法:
9+6=15(去掉高位1,也就是減10)得到5.
對於十六進制數,從c到5可用減法:
c-7=5 因為7+9=16 將9作為7的補數
改寫為加法:
c+9=15(去掉高位1,也就是減16)得到5.
在計算機中,如果我們用1個位元組表示一個數,一個位元組有8位,超過8位就進1,在內存中情況為(100000000),進位1被丟棄。
⑴一個數為正,則它的原碼、反碼、補碼相同
⑵一個數為負,剛符號位為1,其餘各位是對原碼取反,然後整個數加1
- 1的原碼為 10000001
- 1的反碼為 11111110
+ 1
- 1的補碼為 11111111
0的原碼為 00000000
0的反碼為 11111111(正零和負零的反碼相同)
+1
0的補碼為 100000000(舍掉打頭的1,正零和負零的補碼相同)
Integer.toHexString的參數是int,如果不進行&0xff,那麼當一個byte會轉換成int時,由於int是32位,而byte只有8位這時會進行補位,
例如補碼11111111的十進制數為-1轉換為int時變為好多1啊,呵呵!即0xffffffff但是這個數是不對的,這種補位就會造成誤差。
和0xff相與後,高24比特就會被清0了,結果就對了。
----
Java中的一個byte,其范圍是-128~127的,而Integer.toHexString的參數本來是int,如果不進行&0xff,那麼當一個byte會轉換成int時,對於負數,會做位擴展,舉例來說,一個byte的-1(即0xff),會被轉換成int的-1(即0xffffffff),那麼轉化出的結果就不是我們想要的了。
而0xff默認是整形,所以,一個byte跟0xff相與會先將那個byte轉化成整形運算,這樣,結果中的高的24個比特就總會被清0,於是結果總是我們想要的。
⑵ java中byte[]轉換成int
java中byte轉換為 int有兩種情況,一種是要求保持值不變,例如進行數值計算,內可採用強制類型轉換容:int i = (int) aByte;
另一種是要求保持最低位元組中各個位不變,3個高位元組全部用0填充,例如進行編解碼操作,
則需要採用位操作:int i = b & 0xff;
int InputStream.read()
該函數返回一個int類型,范圍從0至255,如果到達流末尾,返回-1。通過ByteArrayInputStream的源碼可以看到是如何從byte轉到int
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
注意,不是自動轉的,需要強製做處理。
⑶ 求java編程 位元組byte怎麼轉換成整形int
publicstaticintbyteToInt(byteb){
//Java總是把byte當做有符處理;我們可以通過將其和0xFF進行二進制與得到它的無符值
returnb&0xFF;
}
⑷ java中int如何轉換byte
因為在java中,int類型的佔4個位元組,而byte佔1個位元組,所以int類型轉化為byte類型時會出現位丟失情況,即將int的低8位作為byte類型的值。int型變數的值為257,對應的二進制是100000001,後8位是00000001,第一個0表示符號位,表示正數,所以變數x的值為1。
⑸ java byte類型是如何自動轉換成int類型的
b的代碼是0xf1,既是11110001
然後轉換成int, 變為11111111 11111111 11111111 11110001 一共是32位
然後b>>>4, 然後變為11111111 11111111 11111111 11111111
d是byte型,然後截斷,內變為111111111
希望能容幫到你~!
⑹ JAVA中怎麼將int數據轉換為byte數據
JAVA中根據以下代碼將int數據轉換為byte數據:
public static byte[] int32ToBytes(int val) {
int size = Integer.SIZE / Byte.SIZE;
byte[] ret = new byte[size];
for (int i = 0; i < size; ++i) {
ret[i] = (byte) (val << (8 * i) >> 56);
}
return ret;
}
(6)javabyteint轉換擴展閱讀
Java也提供了一個byte數據類型,並且是基本類型。java byte是做為最小的數字來處理的,因此它的值域被定義為-128~127,也就是signed byte。
byte,即位元組,由8位的二進制組成。在Java中,byte類型的數據是8位帶符號的二進制數。在計算機中,8位帶符號二進制數的取值范圍是[-128, 127],所以在Java中,byte類型的取值范圍也是[-128, 127]。
運算規則:
####正數的最高位都是 0 ,正數的值就是二進製表示的值。 ####
####負數的最高位都是 1 ,負數的值是 取反後加一 然後加個負號得到得值。 ####
⑺ java中int轉換byte型
下面這個解答不是我寫的,我也在看,還不是很明白,但這個解答是正確的:
這個是編碼方式決定的,Java中正數用源碼表示,負數用補碼表示,第一位是符號位。
所以對於128和-129,他們的編碼分別是:
0000 0000 0000 0000 0000 0000 1000 0000
1111 1111 1111 1111 1111 1111 0111 1111。
對於a來說,1000 0000是負數(第一位為1),它的絕對值是1000 0000即128,
而對於b來說,0111 1111是正數,值為127。
————————————————————————————————————
0 00000000
1 00000001
... ........
127 01111111
----------------
共 128 個
-1 11111111
-2 11111110
... ........
-128 10000000
----------------
共 128 個
我們都知道byte佔8位。而2的8次方等於256,也就是byte最多可以表示256個不同的數,
0~127:128個
-0~127:128個
但是這里0與-0表示一樣的數了,所以就用-0的二進制補碼表示到-128裡面去了
⑻ java 如何將byte[4]數組轉換成一個int型數據
java中將4位元組的byte數組轉成一個int值的工具方法如下:
/**
* @param byte[]
* @return int
*/
public static int byteArrayToInt(byte[] b){
byte[] a = new byte[4];
int i = a.length - 1,j = b.length - 1;
for (; i >= 0 ; i--,j--) {//從b的尾部(即int值的低位)開始數據
if(j >= 0)
a[i] = b[j];
else
a[i] = 0;//如果b.length不足4,則將高位補0
}
int v0 = (a[0] & 0xff) << 24;//&0xff將byte值無差異轉成int,避免Java自動類型提升後,會保留高位的符號位
int v1 = (a[1] & 0xff) << 16;
int v2 = (a[2] & 0xff) << 8;
int v3 = (a[3] & 0xff) ;
return v0 + v1 + v2 + v3;
}
⑼ java 如何將byte[4]數組轉換成一個int型數據
java中將4位元組的byte數組轉成一個int值的工具方法如下:
/**
* @param byte[]
* @return int
*/
public static int byteArrayToInt(byte[] b){
byte[] a = new byte[4];
int i = a.length - 1,j = b.length - 1;
for (; i >= 0 ; i--,j--) {//從b的尾部(即int值的低位)開始數據
if(j >= 0)
a[i] = b[j];
else
a[i] = 0;//如果b.length不足4,則將高位補0
}
int v0 = (a[0] & 0xff) << 24;//&0xff將byte值無差異轉成int,避免Java自動類型提升後,會保留高位的符號位
int v1 = (a[1] & 0xff) << 16;
int v2 = (a[2] & 0xff) << 8;
int v3 = (a[3] & 0xff) ;
return v0 + v1 + v2 + v3;
}