javabyte二進制
Ⅰ 在java中怎麼把位元組數組轉換成二進制字元串
可以使用Integer類的toBinaryString方法,例如:
bytea=0x45;
StringbinStr=Integer.toBinaryString(a).
API中toBinaryString的解釋:
toBinaryString
public static String toBinaryString(inti)
以二進制(基數 2)無符號整數形式返回一個整數參數的字元串表示形式。
如果參數為負,該無符號整數值為參數加上 232;否則等於該參數。將該值轉換為二進制(基數 2)形式的無前導0的 ASCII 數字字元串。如果無符號數的大小為零,則用一個零字元'0'(』u0030』) 表示它;否則,無符號數大小的表示形式中的第一個字元將不是零字元。字元'0'('u0030') 和'1'('u0031') 被用作二進制數字。
參數:
i- 要轉換為字元串的整數。
返回:
用二進制(基數 2)參數表示的無符號整數值的字元串表示形式。
從以下版本開始:
JDK1.0.2
Ⅱ java怎麼把一個byte變數按二進制輸出
/**
* 將byte轉換為一個長度為8的byte數組,數組每個值代表bit
*/
public static byte[] getBooleanArray(byte b) {
byte[] array = new byte[8];
for (int i = 7; i >= 0; i--) {
array[i] = (byte)(b & 1);
b = (byte) (b >> 1);
}
return array;
}
/**
* 把byte轉為字元串的bit
*/
public static String byteToBit(byte b) {
return ""
+ (byte) ((b >> 7) & 0x1) + (byte) ((b >> 6) & 0x1)
+ (byte) ((b >> 5) & 0x1) + (byte) ((b >> 4) & 0x1)
+ (byte) ((b >> 3) & 0x1) + (byte) ((b >> 2) & 0x1)
+ (byte) ((b >> 1) & 0x1) + (byte) ((b >> 0) & 0x1);
}
使用:
byte b = 0x35; // 0011 0101
// 輸出 [0, 0, 1, 1, 0, 1, 0, 1]
System.out.println(Arrays.toString(getBooleanArray(b)));
// 輸出 00110101
System.out.println(byteToBit(b));
// JDK自帶的方法,會忽略前面的 0
System.out.println(Integer.toBinaryString(0x35));
Ⅲ java中byte占幾個位元組
byte 1個位元組 8位;short、char 2個位元組 16位;int float 4個位元組 32位;double、long 8個位元組 64位;別說些錯答案,位元組和位是有區別的好嘛?!
Ⅳ 關於java的byte取值范圍,一定給分
關於byte位元組范圍理解
首先規定二進制的頭位為符號位,0為正,1為負
符號位用紅色標記一下
則下面的數01111111和00000000代表:
0 1 1 1 1 1 1 1 = + 127 =2^0+2^1+2^2+2^3+2^4+2^5+2^6= 2^7-1(公式就不推啦)
0 0 0 0 0 0 0 0 = + 0
正數已經規定好了而且二進制計算也對應相應的數計算(如1+1=2對應 00000001+00000001=00000002)
這下就差規定負數了
還剩下 1 0000000到1 1111111的代表沒有規定
1 1 1 1 1 1 1 1 =?
1 0 0 0 0 0 0 0 =?
這里就發現二進制0 0000000代表0了,那1 0000000代表什麼?代表 -0 ?這樣不是浪費資源而且不合理?
肯定有人想那 1 0000000規定-1 ,1 1111111規定-128不就好了嘛。
但是這就不符合對應的數計算啦 (如0-1代表0 0000000-0 0000001=?等於-1嗎?明顯感覺哪裡不合理啊)
可以看到正數計算都是符合對應的數計算,那麼0 1111111代表的127在加一會怎麼樣?
可以看到0 1111111+0 0000001=1 0000000
那麼1 0000000代表著什麼數呢?
程序員就規定這個數代表著-128,那麼怎麼來的呢。
先從0 0000000為突破口。意外發現
1 1111111(8位)+0 0000001(8位)=1 0 0000000(9位)而最頭位不存儲的話只剩下0 0000000,而這個數不是代表著0嗎。那麼只有-1+1等於0了。所以規定了1 1111111代表著-1.
-1-1=-2(1 1111110)
-2-1=-3(1 1111101)
-3-1=-4(1 1111100)
·························。。。。。。。。。。。
-127-1=-128(1 0000000)
所以就規定了1 0000000為-128
結論就是:
0 1 1 1 1 1 1 1 +127
0 0 0 0 0 0 0 0 +0
1 1 1 1 1 1 1 1 -1
1 0 0 0 0 0 0 0 -128
這樣計算就符合了對應代表數的計算,但是負數的二進制就沒法從原來的公式推出來了
於是有了補碼
補碼原則:符號位不變,先減一,其它位再相反可以了;
補碼如:
1 1 1 1 1 1 1 1 符號位不變
1 1 1 1 1 1 1 0 減一
1 0 0 0 0 0 0 1 再相反位
這個就可以用原來的公式推出代表著-1啦,以上就是本人自己的理解啦,主要為了簡明易懂。其次符號位算入其中不嚴謹,可能有錯還望指出。
Ⅳ JAVA中byte類型的介紹。 謝謝
1、在Java中,byte類型的數據是8位帶符號的二進制數。最高位表示正負,0為正,1為負。
2、java byte是做為最小的數字來處理的,因此它的值域被定義為-128~127,也就是signed byte。
3、正數的最高位都是 0 ,正數的值就是二進製表示的值。
4、負數的最高位都是 1 ,負數的值是 取反後加一 然後加個負號得到的值。
(5)javabyte二進制擴展閱讀
1、java基本數據類型
JAVA中一共有八種基本數據類型,分別是byte、short、int、long、float、double、char、boolean。
2、java各數據類型取值范圍
byte,整型,1個位元組,范圍:-2的7次方 ~ 2的7次方-1;
short,整型,2個位元組,范圍:-2的15次方 ~ 2的15次方-1;
int,整型,4個位元組,范圍:-2的31次方 ~ 2的31次方-1;
long,整型,8個位元組,范圍:-2的63次方 ~ 2的63次方-1;
float,浮點型,4個位元組,范圍:3.402823e+38 ~ 1.401298e-45;
double,浮點型,8個位元組,范圍:1.797693e+308~ 4.9000000e-324;
char,文本型,2個位元組,范圍:0~2的16次方-1;
boolean,布爾型,1個位元組,范圍:true/false;
參考資料
網路-java字元型
Ⅵ java byte數組寫入本地文件,那這個文件是二進制文件嗎不是的話,是什麼文件跪求解答啊
byte是十進制的數字。。
給你看個例子:
public class Test {
public static void main(String[] args) {
String str = "b";
byte[] bytes = str.getBytes();
for(byte b:bytes){
System.out.println(b);
System.out.println(Integer.toBinaryString(b));
}
}
}
Ⅶ Java byte 二進制
byte a = 1111; // 這樣定義,這個 1111 到底是二進制,還是10進制,還是 X 進制,系統是不知道的。。
在這里,1111 默認被當作 10 進制。。
Java 不支持顯式輸入二進制,默認為 10 進制,0 開頭為8進制,比如 01111,0x開頭為16 進制,比如 0x11。。
byte 數據類型所表示的范圍為 -128~127,已經超出范圍了。。
Ⅷ java如何將BYTE型數轉化為八位二進制,及如何將八位二進制數轉化為Byte型的。
使用八進製表示整數,只要在十進制數前加一個0就可以了,比如12的八進制就i=012,這樣在輸出時System.out.println("i=" +i)就是i=10
Ⅸ Java里byte類型最大和最小值的二進製表示
Java用的是補碼,補碼的規則就是這樣,每位都是 1 就表示負一,最高位是 1 其餘位是 0 表示的是最小值
Ⅹ JAVA 位運算 (byte) (a << 2); 是什麼意思
您好,你的問題,我之前好像也遇到過,以下是我原來的解決思路和方法,希望能幫助到你,若有錯誤,還望見諒!展開全部
你看下這篇文章就清楚了
首先要明白一點,這裡面所有的操作都是針對存儲在計算機中中二進制的操作,那麼就要知道,正數在計算機中是用二進製表示的,負數在計算機中使用補碼表示的。
左移位:<<,有符號的移位操作
左移操作時將運算數的二進制碼整體左移指定位數,左移之後的空位用0補充
右移位:>>,有符號的移位操作
右移操作是將運算數的二進制碼整體右移指定位數,右移之後的空位用符號位補充,如果是正數用0補充,負數用1補充。
例子:
public static void main(String[] args)
{
System.out.println(3<<2);//3左移2位
System.out.println(-3<<2);//-3左移2位
System.out.println(6>>2);//6右移2位
System.out.println(-6>>2);//-6右移2位
}
輸出結果
12
-12
1
-2
下面解釋一下:
00000000 00000000 00000000 00000011 +3在計算機中表示
00000000 00000000 00000000 0000001100 左移2位,補0,結果為12
----------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000011 +3在計算機中表示
11111111 11111111 11111111 11111100
11111111 11111111 11111111 11111101 -3在計算機中表示
11111111 11111111 11111111 1111110100 左移2位,補0,結果為負數,就是補碼了,求原碼
10000000 00000000 00000000 00001011
10000000 00000000 00000000 00001100 結果-12
----------------------------------------------------------------------------------------------
這也說明了一個問題:在計算機中,以1開頭的就是補碼的形式,是負數。
00000000 00000000 00000000 00000110 +6在計算機中表示方法
0000000000 00000000 00000000 00000110 右移兩位,正數補0,結果為1
----------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000110 +6在計算機中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在計算機中的表示
1111111111 11111111 11111111 11111010 右移兩位,結果為負數
1000000000 00000000 00000000 000001
1000000000 00000000 00000000 000010 結果為-2
這個地方很容易弄混,多想幾次就會慢慢理解了。
上面解釋了帶符號的移位操作,下面解釋一下不帶符號的移位操作
無符號的移位只有右移,沒有左移使用「>>>」進行移位,都補充0
例如:
public static void main(String[] args)
{
System.out.println(6>>>2);
System.out.println(-6>>>2);
}
結果:
1
1073741822
分析:
00000000 00000000 00000000 00000110 +6在計算機中表示方法
0000000000 00000000 00000000 00000110 右移兩位,正數補0,結果為1
-----------------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000110 +6在計算機中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在計算機中的表示
0011111111 11111111 11111111 11111010 右移兩位,補充0,結果為1073741822
以下來自:
可以參考
移位操作要注意的問題是高(低)位是補0還是補1和對char, byte, short型的操作:
(1)<< : (left-shift), 最低位補0
(2)>> : (signed right-shift), 右移過程使用符號位擴展(sign extension),即如果符號為為1則高位補1, 是0則補0,也就是邏輯右移
(3)>>> : (unsigned right-shit),右移過程使用零擴展(zero extension),即最高位一律補0,也就是算術右移
(4)移位操作的數據類型可以是byte, char, short, int, long型,但是對byte, char, short進行操作時會先把它們變成一個int型,最後得到一個int型的結果,對long型操作時得到一個long型結果,不可以對boolean型進行操作。
(5)移位操作符可以和=合並起來,即 <<= 、 >>= 和 >>>=。例如 a >>= 2; 表示將a右移兩位後的值重新賦給a。當時在使用這三個操作符對 byte, char, short型數據進行操作時要注意,例如有一下代碼片段:非常感謝您的耐心觀看,如有幫助請採納,祝生活愉快!謝謝!