我无法理解以下行为。
我正在尝试使用二进制文字声明字节掩码:
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 而不考虑符号。
您的“字节掩码”相当于0xffor 255,它们太大而无法放入 8 位有符号byte, not -1,因为代码中的文字是int. 如果该值在较小类型的范围内,编译器可以安全地将其填入其中,但不能安全地将范围外的值分配给-128..127变量byte,并且您需要进行强制转换。
所有数字文字都被视为“int”,除非另有强制转换或它们包含小数点或“e”。
你可以像这样进行类型转换
byte mask = (byte) 0b1111_1111;