簡體   English   中英

在Java中將int轉換為byte

[英]Casting an int to byte in Java

請不要將其標記為重復項。 這是完全不同的問題嗎? 我已經回答過有關此域的一系列問題,之前在此網站上曾問過。

我引用赫伯特·希爾德(Herbert Schildt)的話:轉換不兼容的類型-如果整數的值大於一個字節的范圍,它將以模數(整數除以該整數的余數)字節范圍(-128到127)為模。

現在考慮一下:字節b =(字節)246;

    System.out.println("---"+246%256); //this gives 246
    System.out.println("---value of b after casting an int to byte---" + b);// this gives -10

Java中的byte是帶符號的,因此它的范圍是-2 ^ 7到2 ^ 7-1-即-128到127。由於246在127之上,因此最終回繞到256-246 = 10。 也就是說,基本上將256(2 ^ 8)加或減,直到它落入范圍。

根據赫伯特的答案是什么? 我認為應該是256-(246%256)=10。(因為246再次超出字節的范圍。)但是我怎么知道它將是246-256還是256-246。 我知道可以通過實現2的補碼來計算。 我需要不使用2的補碼就知道這一點(只需加上或減去246-256或256-246。)

當您將int轉換為byte時。 Java將int的最后8位保存為字節並拋出其他位。

byte b = (byte) (246+1024);  // -10

當您需要將其打印為未標記時,請使用Byte.totoUnsignedInt()

byte b = (byte) 246;
int i = Byte.toUnsignedInt(b);
System.out.println(i);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM