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

為了賬號安全,請及時綁定郵箱和手機立即綁定

toHexString()函數(shù)

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

正在回答

3 回答

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)致亂碼或者其他錯誤。

(這樣解釋對你有幫助嗎?

-----------用心回答求表揚~)

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

qq_酸牛奶_0 提問者

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

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

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

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

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

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

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

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

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

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

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

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

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

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

你們說的意思我大概明白,我有個疑問是(b & 0xff)之后是32位還是8位,如果是32位,以16進制打印出來的時候為什么不是000000c4,而結(jié)果是c4 。
2016-07-18 回復(fù) 有任何疑惑可以回復(fù)我~
查看5條回復(fù)

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

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

charsandrew

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

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

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

qq_酸牛奶_0 提問者

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

舉報

0/150
提交
取消

toHexString()函數(shù)

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

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

幫助反饋 APP下載

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

公眾號

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