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