第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

toHexString()函數(shù)

????toHexString()函數(shù)的參數(shù)是整型嗎,如果實(shí)參是一個(gè)字節(jié)或者四個(gè)字節(jié),是否會(huì)發(fā)生類型轉(zhuǎn)換?

正在回答

3 回答

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)~)

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_酸牛奶_0 提問(wèn)者

謝謝這么多的回答,本來(lái)以為會(huì)回答的很慢。受寵若驚。 但是不明白為什么要位與上0xff。老師說(shuō)的是"把前面24位去掉"對(duì)吧;第一個(gè)問(wèn)題,為什么是24位呢,char類型不是占16位嗎;第二個(gè)問(wèn)題,16位的char位與0xff的結(jié)果是8位還是16位;第三個(gè)問(wèn)題,“& 0xff”后不是還會(huì)發(fā)生類型轉(zhuǎn)換嗎;第四個(gè)問(wèn)題,為什么自動(dòng)類型轉(zhuǎn)換“很可能發(fā)生運(yùn)算錯(cuò)誤”? 還請(qǐng)大神指教,謝謝啦。
2016-07-10 回復(fù) 有任何疑惑可以回復(fù)我~
#2

要做Java大師 回復(fù) qq_酸牛奶_0 提問(wèn)者

我查了一下,當(dāng)時(shí)我說(shuō)錯(cuò)了,char類型是兩個(gè)字節(jié)8位,所以老師說(shuō)把前面24位去掉。 按位與如果位數(shù)不夠前面需要補(bǔ)零,所以與8位的結(jié)果就一定是8位了(當(dāng)時(shí)發(fā)現(xiàn)說(shuō)錯(cuò)了,不過(guò)找不到你的提問(wèn)了,我也擔(dān)心好久,誤導(dǎo)你了,不好意思?。?這個(gè)時(shí)候會(huì)發(fā)生類型轉(zhuǎn)換的,因?yàn)橐獜?位變成32位,所以前面會(huì)自動(dòng)補(bǔ)零。 一般自動(dòng)類型轉(zhuǎn)換發(fā)生運(yùn)算錯(cuò)誤出現(xiàn)在從高位轉(zhuǎn)低位的情況,高位低位是相對(duì)位數(shù)說(shuō)的,比如8位就算低位,32位就算高位,從32位轉(zhuǎn)到8位,如果這個(gè)數(shù)字其實(shí)是在8位可以表示范圍內(nèi)的,就不會(huì)出錯(cuò)了,如果是8位表示不了的,比他能表示的最大數(shù)還大,就會(huì)發(fā)生溢出,這就是他說(shuō)的運(yùn)算錯(cuò)誤。
2016-07-12 回復(fù) 有任何疑惑可以回復(fù)我~
#3

qq_酸牛奶_0 提問(wèn)者 回復(fù) 要做Java大師

感謝回答,但是還想再鉆會(huì)兒牛角尖。 按您說(shuō)的,發(fā)生錯(cuò)誤的情況就是大的轉(zhuǎn)化為小的,長(zhǎng)字節(jié)轉(zhuǎn)化為短字節(jié)嗎?“按位與如果位數(shù)不夠前面補(bǔ)0”那么“& 0xff”使用的前提就是已知原數(shù)位數(shù)不超過(guò)8個(gè)位對(duì)吧,否則前面的都變成0了就不對(duì)了。既然它只能用在已知原數(shù)不超過(guò)八位的情況,也就是說(shuō)直接類型轉(zhuǎn)換也不會(huì)出錯(cuò),那么“& 0xff”似乎實(shí)際上沒(méi)有什么用啊。 另外,java里面的char是16位的。
2016-07-12 回復(fù) 有任何疑惑可以回復(fù)我~
#4

要做Java大師 回復(fù) qq_酸牛奶_0 提問(wèn)者

剛剛看了一篇文章,是說(shuō) .toHexString(byte b&0xff)是為了將高24位清零,這個(gè)說(shuō)的是和我們想得不一樣,b會(huì)先強(qiáng)制類型轉(zhuǎn)換,成32位,這時(shí)如果是負(fù)數(shù)(當(dāng)然作為byte類型它其實(shí)并不代表一個(gè)負(fù)數(shù))做補(bǔ)位肯定會(huì)在前24位上加符號(hào)位1,然后才會(huì)做&0xff,這下這個(gè)與運(yùn)算就很有意義了,可以消除掉高24位的1,(因?yàn)閎yte的首位并不代表符號(hào)嘛,所以對(duì)前24位做符號(hào)位的補(bǔ)位就不合理了)。 另外謝謝你的糾正~
2016-07-12 回復(fù) 有任何疑惑可以回復(fù)我~
#5

qq_酸牛奶_0 提問(wèn)者 回復(fù) 要做Java大師

謝謝,差不多明白了。 但是byte轉(zhuǎn)int為什么前面補(bǔ)的是1而不是0呢,最高位補(bǔ)1不就變成負(fù)數(shù)了嗎。
2016-07-13 回復(fù) 有任何疑惑可以回復(fù)我~
#6

要做Java大師 回復(fù) qq_酸牛奶_0 提問(wèn)者

符號(hào)位嘛,如果是01111111,那他覺(jué)得這是一個(gè)正數(shù),補(bǔ)成16位就是前面補(bǔ)八個(gè)0,如果是11111111,那么他覺(jué)得這是一個(gè)負(fù)數(shù)(-1),那么他就在前面補(bǔ)八個(gè)1,16個(gè)1在補(bǔ)碼中還是-1,它以為這樣做可以保持值不變。事實(shí)上,在byte類型中11111111是255的意思,不是-1
2016-07-13 回復(fù) 有任何疑惑可以回復(fù)我~
#7

qq_酸牛奶_0 提問(wèn)者 回復(fù) 要做Java大師

明白了,謝謝
2016-07-13 回復(fù) 有任何疑惑可以回復(fù)我~
#8

charsandrew 回復(fù) 要做Java大師

你們說(shuō)的意思我大概明白,我有個(gè)疑問(wèn)是(b & 0xff)之后是32位還是8位,如果是32位,以16進(jìn)制打印出來(lái)的時(shí)候?yàn)槭裁床皇?00000c4,而結(jié)果是c4 。
2016-07-18 回復(fù) 有任何疑惑可以回復(fù)我~
查看5條回復(fù)

@要做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

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

charsandrew

b & 0xff 中有一點(diǎn)我覺(jué)得很奇怪,這里的b是一個(gè)字節(jié)也就是8位,不進(jìn)行& 0xff 的話,會(huì)自動(dòng)轉(zhuǎn)換成32位,以16進(jìn)制表示就是ffffffc4 ,那么 (b & 0xff)之后到底是幾位,如果是32位的話,打印出來(lái)為什么不是000000c4 ,如果這樣運(yùn)算之后是8位,那么toHexString為什么沒(méi)有給它轉(zhuǎn)換成32位呢?
2016-07-18 回復(fù) 有任何疑惑可以回復(fù)我~

byte轉(zhuǎn)int低位轉(zhuǎn)高位啊,自動(dòng)轉(zhuǎn)型,低位轉(zhuǎn)高位

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

qq_酸牛奶_0 提問(wèn)者

低位轉(zhuǎn)高位什么意思?
2016-07-10 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

toHexString()函數(shù)

我要回答 關(guān)注問(wèn)題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)