簡體   English   中英

JAVA:為什么帶負號的字節的二進制文字被認為是整數類型?

[英]JAVA: why binary literal for byte with negative sign is being considered as integer type?

我無法理解以下行為。

我正在嘗試使用二進制文字聲明字節掩碼:

byte mask = 0b1111_1111;

但那是不可能的,因為我收到以下錯誤消息:

類型不匹配:無法從int轉換為byte

最有趣的是,當我嘗試直接聲明掩碼時,以十進制表示

byte mask = -1;

我沒有錯誤,但這兩個表示應該絕對平等!

我究竟做錯了什么? 提前致謝。

您可以安全地將-2^7 to 2^7-1 (-128 to 127)的值分配給一個byte ,因為它是8位。

其中0b1111_1111 = 255

所以需要一個演員

 byte mask = (byte) 0b1111_1111;

0b1111_1111等於255,超出byte[-128, 127] 0b1111_1111 ]范圍(因為它是有符號的)。 使用:

byte mask=(byte)0b1111_1111&0xff;

縮小將移除(全零)高位並將8適合8而不考慮符號。

您的“字節掩碼”等效於0xff255 ,它們太大而不適合8位有符號byte ,而不是-1 ,因為代碼中的文字是int 如果該值在較小類型的范圍內,編譯器可以安全地將其-128..127其中,但是它無法安全地將范圍-128..127之外的值-128..127byte變量,並且您將需要一個轉換。

除非另外投射或包含小數點或'e',否則所有數字文字都被視為'int'。

你可以這樣做類型轉換

    byte mask = (byte) 0b1111_1111;

暫無
暫無

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

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