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