我无法理解以下行为。
我正在尝试使用二进制文字声明字节掩码:
byte mask = 0b1111_1111;
但这是不可能的,因为我收到以下错误消息:
类型不匹配:无法从 int 转换为 byte
最有趣的是,当我尝试直接声明掩码时,以十进制表示
byte mask = -1;
我没有错误,但这两种表示应该绝对相等!
我究竟做错了什么?提前致谢。
我无法理解以下行为。
我正在尝试使用二进制文字声明字节掩码:
byte mask = 0b1111_1111;
但这是不可能的,因为我收到以下错误消息:
类型不匹配:无法从 int 转换为 byte
最有趣的是,当我尝试直接声明掩码时,以十进制表示
byte mask = -1;
我没有错误,但这两种表示应该绝对相等!
我究竟做错了什么?提前致谢。
您可以安全地-2^7 to 2^7-1 (-128 to 127)
为 a分配一个值byte
,因为它是 8 位。
其中0b1111_1111
=255
所以需要一个演员
byte mask = (byte) 0b1111_1111;
该值0b1111_1111
等于 255,超出byte
的范围[-128, 127]
(因为它是有符号的)。利用:
byte mask=(byte)0b1111_1111&0xff;
缩小将删除(全零)高位并将 8 放入 8 而不考虑符号。
您的“字节掩码”相当于0xff
or 255
,它们太大而无法放入 8 位有符号byte
, not -1
,因为代码中的文字是int
. 如果该值在较小类型的范围内,编译器可以安全地将其填入其中,但不能安全地将范围外的值分配给-128..127
变量byte
,并且您需要进行强制转换。
所有数字文字都被视为“int”,除非另有强制转换或它们包含小数点或“e”。
你可以像这样进行类型转换
byte mask = (byte) 0b1111_1111;