課程
/后端開發(fā)
/Java
/二進(jìn)制基礎(chǔ)
為何11001111十進(jìn)制是-49;但是11001111通過&ff之后,就變成十進(jìn)制207了呢?
2016-12-29
源自:二進(jìn)制基礎(chǔ) 5-1
正在回答
/** *????11001111?=?-49是byte類型?占8bit *????進(jìn)行&運(yùn)算時會自動轉(zhuǎn)換類型為int?占32bit *????最高位為符號位??0為正數(shù)?1為負(fù)數(shù) *????即 *????0000?0000?0000?0000?1111?1111?1111?1111(正數(shù)) *????&?????????????????????????????1100?1111(負(fù)數(shù)) *--------------------------------------------- *????0000?0000?0000?0000?0000?0000?1100?1111??=?207 *???? *????ps:其實在java中如果一個數(shù)不指定類型??JVM會有一個默認(rèn)類型的??整型默認(rèn)是int *????????浮點型默認(rèn)為double?比如說byte?a?=?10;?byte?b?=?a?+?1;?//這個是錯的?因為1是Int類型? *????????int類型是不能自動轉(zhuǎn)換成Byte類型的??但反過來可以。 */
斯締璺 提問者
三爺JaVaja
雪域鬼怪已經(jīng)回答很好?但是有點小瑕疵?不糾正的話以后很有可能犯錯誤 有點小瑕疵?byte?-49轉(zhuǎn)成int時?是在前面補(bǔ)全24個1,而不是000...0000(所以用(int)強(qiáng)轉(zhuǎn)值還是-49而不是207?) 所以當(dāng)你想用byte表示無符號數(shù)字時?byte轉(zhuǎn)int前面補(bǔ)充的是1?只能用0xff切斷然后再輸出的時候才會在前面自動補(bǔ)0?? byte?g=-49; System.out.println(Integer.toBinaryString(g)); System.out.println(Integer.toBinaryString((g&0xffff))); System.out.println(Integer.toBinaryString((g&0xff))); System.out.println(g); System.out.println((g&0xffff)); System.out.println((g&0xff));
運(yùn)行結(jié)果
11111111111111111111111111001111
1111111111001111
11001111
-49
65487
207
弄明白了,謝啦
舉報
二進(jìn)制是計算機(jī)唯一能識別的語言,是學(xué)習(xí)計算機(jī)技術(shù)必備的知識
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號
2016-12-31
2017-06-06
運(yùn)行結(jié)果
11111111111111111111111111001111
1111111111001111
11001111
-49
65487
207
2017-03-05
弄明白了,謝啦
2016-12-31