課程
/后端開發(fā)
/Java
/文件傳輸基礎(chǔ)——Java IO流
????toHexString()函數(shù)的參數(shù)是整型嗎,如果實參是一個字節(jié)或者四個字節(jié),是否會發(fā)生類型轉(zhuǎn)換?
2016-07-06
源自:文件傳輸基礎(chǔ)——Java IO流 1-1
正在回答
public static String toHexString(int i)
這個是本方法的聲明,一個一個解答問題,它的參數(shù)是整型的。
在java中int類型就是四個字節(jié)的,所以如果實參是四個字節(jié)是不會發(fā)生類型轉(zhuǎn)換的啊,其實有點沒明白為什么問這個問題,是不是因為視頻中出現(xiàn)的 .toHexString(char b&0xff)這個句子,會覺得里面是16位的數(shù)據(jù)?
其實做這個主要是為了防止char轉(zhuǎn)成int 類型由于計算機補碼存儲方式的原因,要專門設(shè)置最高位符號位。
由于char類型是16位二進制的(兩字節(jié)),而且最高位有可能是1,但在補碼中首位為1表示負(fù)數(shù),首位為0表示正數(shù),所以,如果沒有按位與,存在最高位是1的char型,則計算機會在轉(zhuǎn)成32位時,先把它當(dāng)成補碼,覺得他是負(fù)數(shù),然后前面就補16位1,
現(xiàn)在做按位與運算,由于char類型只有16位,要和32位按位與,前面先補0,這樣做之后,前16位就是0了,這樣的存儲方式符合計算機的數(shù)據(jù)類型存儲規(guī)律。
所以如果實參是一個字節(jié)或兩個字節(jié),那么如果不做0xff這樣的按位與運算,它會自動類型轉(zhuǎn)換(小類型轉(zhuǎn)大類型),但很有可能會發(fā)生運算錯誤,如果是四個字節(jié)其實道理類似,就看你這個數(shù)據(jù)是否會在存取上面由于補碼的運算問題導(dǎo)致亂碼或者其他錯誤。
(這樣解釋對你有幫助嗎?
-----------用心回答求表揚~)
qq_酸牛奶_0 提問者
要做Java大師 回復(fù) qq_酸牛奶_0 提問者
qq_酸牛奶_0 提問者 回復(fù) 要做Java大師
charsandrew 回復(fù) 要做Java大師
@要做Java大師:
似乎有的byte會補1有的不會:“慕課網(wǎng)ABC”的三種輸出:System.out.print(Integer.toHexString(b)+" ");System.out.print(Integer.toHexString(b & 0xff)+" ");System.out.print(Integer.toBinaryString(b)+"\n");ffffffc4 c4 11111111111111111111111111000100ffffffbd bd 11111111111111111111111110111101ffffffbf bf 11111111111111111111111110111111ffffffce ce 11111111111111111111111111001110ffffffcd cd 11111111111111111111111111001101fffffff8 f8 1111111111111111111111111111100041 41 100000142 42 100001043 43 1000011
charsandrew
byte轉(zhuǎn)int低位轉(zhuǎn)高位啊,自動轉(zhuǎn)型,低位轉(zhuǎn)高位
舉報
為您介紹IO流的使用,以及對象的序列化和反序列化的內(nèi)容
3 回答toHexString的問題
2 回答為什么toHexString()里要加&0xff?是什么意思?
2 回答FileOutputStream構(gòu)造函數(shù)參數(shù)有什么不同
3 回答在主函數(shù)中是怎么實現(xiàn)子類調(diào)用父類的構(gòu)造函數(shù)
3 回答關(guān)于父類沒有無參構(gòu)造函數(shù)的反序列化問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-07-06
public static String toHexString(int i)
這個是本方法的聲明,一個一個解答問題,它的參數(shù)是整型的。
在java中int類型就是四個字節(jié)的,所以如果實參是四個字節(jié)是不會發(fā)生類型轉(zhuǎn)換的啊,其實有點沒明白為什么問這個問題,是不是因為視頻中出現(xiàn)的 .toHexString(char b&0xff)這個句子,會覺得里面是16位的數(shù)據(jù)?
其實做這個主要是為了防止char轉(zhuǎn)成int 類型由于計算機補碼存儲方式的原因,要專門設(shè)置最高位符號位。
由于char類型是16位二進制的(兩字節(jié)),而且最高位有可能是1,但在補碼中首位為1表示負(fù)數(shù),首位為0表示正數(shù),所以,如果沒有按位與,存在最高位是1的char型,則計算機會在轉(zhuǎn)成32位時,先把它當(dāng)成補碼,覺得他是負(fù)數(shù),然后前面就補16位1,
現(xiàn)在做按位與運算,由于char類型只有16位,要和32位按位與,前面先補0,這樣做之后,前16位就是0了,這樣的存儲方式符合計算機的數(shù)據(jù)類型存儲規(guī)律。
所以如果實參是一個字節(jié)或兩個字節(jié),那么如果不做0xff這樣的按位與運算,它會自動類型轉(zhuǎn)換(小類型轉(zhuǎn)大類型),但很有可能會發(fā)生運算錯誤,如果是四個字節(jié)其實道理類似,就看你這個數(shù)據(jù)是否會在存取上面由于補碼的運算問題導(dǎo)致亂碼或者其他錯誤。
(這樣解釋對你有幫助嗎?
-----------用心回答求表揚~)
2016-07-13
@要做Java大師:
似乎有的byte會補1有的不會:
“慕課網(wǎng)ABC”的三種輸出:
System.out.print(Integer.toHexString(b)+" ");
System.out.print(Integer.toHexString(b & 0xff)+" ");
System.out.print(Integer.toBinaryString(b)+"\n");
ffffffc4 c4 11111111111111111111111111000100
ffffffbd bd 11111111111111111111111110111101
ffffffbf bf 11111111111111111111111110111111
ffffffce ce 11111111111111111111111111001110
ffffffcd cd 11111111111111111111111111001101
fffffff8 f8 11111111111111111111111111111000
41 41 1000001
42 42 1000010
43 43 1000011
2016-07-06
byte轉(zhuǎn)int低位轉(zhuǎn)高位啊,自動轉(zhuǎn)型,低位轉(zhuǎn)高位