【发布时间】:2013-11-17 03:42:40
【问题描述】:
我看到有人问有关错误“类型不匹配:无法将 int 转换为字节”的问题。但它们大多是由所涉及的算术运算引起的。
这是我的情况:
(当我想在 Eclipse Kepler 中使用位时会发生这种情况)
//java 7 binary literals
byte a = 0b01111111; //8-bit it compiles
byte b = 0b10000000; //8-bit error: Type mismatch: cannot convert int to byte.
byte c = (byte) 0b10000000; //8-bit it works fine if casted.
问题是,如果它是 8 位并且最高位是 1,那么编译器会出错。 我想知道为什么。前缀 0b 表示它是二进制文字,那么为什么编译器将最高位作为有符号整数位或类似的东西?
感谢您的回答。
[编辑3:]
byte a = -128; //a = 0xFF = 11111111 (8 bits), compiler says ok.
byte b = 0b11111111; //compiler error
[Edit2:按位 & 运算也会以某种方式触发错误]
byte a = 0b00000000; //8 bits
a = (a&0xFF); //gives same error: Type mismatch: cannot convert int to byte
a = (byte)(a&0xFF); //it is fine to cast
[Edit1:截图更新]
【问题讨论】:
标签: java byte bit-manipulation