[英]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而不考慮符號。
您的“字節掩碼”等效於0xff
或255
,它們太大而不適合8位有符號byte
,而不是-1
,因為代碼中的文字是int
。 如果該值在較小類型的范圍內,編譯器可以安全地將其-128..127
其中,但是它無法安全地將范圍-128..127
之外的值-128..127
給byte
變量,並且您將需要一個轉換。
除非另外投射或包含小數點或'e',否則所有數字文字都被視為'int'。
你可以這樣做類型轉換
byte mask = (byte) 0b1111_1111;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.