亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

強制轉換問題 謝謝了!

強制轉換問題 謝謝了!

慕姐8946757 2017-08-28 23:21:28
package com.heima;public class Demo4 { public static void main(String[] args) { int num = 130; byte x = (byte) num; System.out.println(x); }}請問這段代碼打印為什么是-126;者個強制轉換byte取值不是-128~127嗎? 為什么回事-126啊 解釋下 謝謝!
查看完整描述

3 回答

已采納
?
望遠

TA貢獻1017條經驗 獲得超1032個贊

//這里涉及到二進制與十進制轉化的問題
并且Java中int占4個字節,byte占1個字節,在通過int強轉為byte時會發生截斷,導致數據失真,這里就是這個問題
public?class?Demo4?{
public?static?void?main(String[]?args)?{
//num是int類型數據,占32位
//即?00000000?00000000?00000000?10000010
int?num?=?130;
//這里嘗試將num強轉為byte類型,而byte只有8位,發生截斷,取后8位
//即10000010?舍棄了前面24個0
byte?x?=?(byte)?num;
//那么二進制10000010表示的10進制是多少?
//java中數據的表示采取的是補碼的形式,即最高位表示符號位,1為負,0為正
//那到底是表示負幾?
//這就要將補碼轉化為原碼
//補碼轉原碼--負數(符號位為1的數)變為原碼時符號位不變,其余各項取反,最后在末尾+1
即補碼10000010??-->?原碼11111110
//原碼11111110表示十進制多少?
//最高位1表示負數,低7位1111110表示十進制126,即原碼11111110表示十進制-126
?System.out.println(x);
}
}


查看完整回答
7 反對 回復 2017-08-29
?
qq_安安_17

TA貢獻49條經驗 獲得超52個贊

public?class?Demo4?{
????public?static?void?main(String[]?args)?{
????int?num?=?130;//定義一個num為int型
????byte?x?=?(byte)?num;
????//把num強制轉化為byte型后,將結構傳遞給一個新定義的byte型的x
????System.out.println(x);
????}
}

你是不是不知道強制轉換???答案已經十分詳細了,為什么沒看懂呢?

Java語言是一種強類型的語言。數據直接的轉換有兩個:

  • 自動類型轉換:從存儲范圍小的類型到存儲范圍大的類型。 具體規則為:?
    byte→short(char)→int→long→float→double?

  • 強制類型轉換:從右向左轉換需要強制

? ?之后結合也有解答了,就不贅述了

??

查看完整回答
3 反對 回復 2017-08-29
?
onemoo

TA貢獻883條經驗 獲得超454個贊

Java 中 int 型占 32 位,byte 占 8 位。Java 的整型間從長到短強制轉型過程只是按位截斷。

十進制數 130 其二進制表示的最后 8 位是?10000010。

轉型為 byte 會從低地址位按位截斷,也就是只保留最后的這 8 位: 10000010。

而 Java 中的整型是有符號數,第一位是符號位。符號位為 1 表示這是負數。負數用二進制補碼表示,而 10000010 作為補碼就表示十進制的 -126。

查看完整回答
3 反對 回復 2017-08-29
  • 慕姐8946757
    慕姐8946757
    還是不太懂啊 能說的仔細點嗎?這個int強制轉換為byte 是怎么回事?
  • onemoo
    onemoo
    你能說說你哪里沒看懂嗎?
  • 3 回答
  • 1 關注
  • 1842 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號