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); } }

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?強制類型轉換:從右向左轉換需要強制
? ?之后結合也有解答了,就不贅述了
??

onemoo
TA貢獻883條經驗 獲得超454個贊
Java 中 int 型占 32 位,byte 占 8 位。Java 的整型間從長到短強制轉型過程只是按位截斷。
十進制數 130 其二進制表示的最后 8 位是?10000010。
轉型為 byte 會從低地址位按位截斷,也就是只保留最后的這 8 位: 10000010。
而 Java 中的整型是有符號數,第一位是符號位。符號位為 1 表示這是負數。負數用二進制補碼表示,而 10000010 作為補碼就表示十進制的 -126。
添加回答
舉報
0/150
提交
取消