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

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

正在回答

4 回答

凌晨來回答問題。

首先我們要弄明白,對于一個buf[i], 我們在什么情況下需要在輸出之前補0,什么時候不需要補0.答案很清楚,如果它的高四位都是0,那么我們需要補,否則不需要。那么問題來了,怎么判斷呢?

老師的代碼是用buf[i] <= 0xf,可是代碼結(jié)果不正確,會出現(xiàn)錯誤補0,也就是三個數(shù)字一起的情況。如果buf[i] == 0xff, 那么按程序是需要補0,因為作為一個byte,0xff實際上等于-1, 那么自然也小于0xf,因為0xf代表15.這就是出錯的問題。

if判定語句改為((buf&oxff)<=oxf)之后,實際上結(jié)果就正確了。因為在Java中整數(shù)默認是int,也就是4個字節(jié)。因為有buf[i] & 0xff, 注意這里0xff 是4個字節(jié)的int類型,那么計算之前會把buf[i]自動進行類型轉(zhuǎn)換,結(jié)果也是int類型,所以我們最終的到的結(jié)果是24位0加上原先的8位buf[i]。這時候的結(jié)果已經(jīng)絕對是個正數(shù),此時要判斷buf[i]高4位是否有1,就看他和0xf的大小就行了。這里要設(shè)計一點補碼的知識,我們還是以buf[i] == 0xff為例:

((buf&oxff)<=oxf)之后的結(jié)果是0x000000ff, 顯然是大于0xf,所以沒有補0.

實際上,我們也可以這么判斷:buf[i] & 0xf0 == 0;這樣的結(jié)果會保留buf[i]的高四位,其他位都是0,比較容易理解。

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

指尖繁華 提問者

非常感謝!
2016-12-20 回復(fù) 有任何疑惑可以回復(fù)我~
#2

未卜先知

“注意這里0xff 是4個字節(jié)的int類型這里不對把”,0xff應(yīng)該還是一個字節(jié),只不過運算的時候會把參與運算的轉(zhuǎn)成int型
2016-12-29 回復(fù) 有任何疑惑可以回復(fù)我~
#3

未卜先知

這里是我錯了 0xff確實是整型
2016-12-29 回復(fù) 有任何疑惑可以回復(fù)我~
#4

i不系之舟i

非常感謝
2017-08-06 回復(fù) 有任何疑惑可以回復(fù)我~
查看1條回復(fù)

if判定語句改為((buf&oxff)<=oxf);之后輸出都是兩位,這個不知原因,跪求求大神解惑???!

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

還有,int b=in.read()則沒有以上問題;


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

或許不是錯,但是為啥有三個數(shù)字一組的,這個不太懂。

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

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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