Java 向左移动位 byte right=0xf;//00001111 System.out.println(Integer.toBinaryString(右));//00001111 right=(byte)(right
如果您没有强制转换到Java 向左移动位 byte right=0xf;//00001111 System.out.println(Integer.toBinaryString(右));//00001111 right=(byte)(right,java,Java,如果您没有强制转换到byte,一切都会好起来 没有为byte定义移位运算符,因此该值首先提升为int——这很好,仍然是0000[…]1111 然后向左移位4位,得到0000[…]111000 然后将其转换为字节,得到字节11110000 然后调用Integer.toBinaryString,它接受一个int参数。这意味着字节1111000被转换为int——在这一点上,它的符号扩展到1111111111 0000(按照),然后被打印出来 选项: 不要向下转换到字节,这样你就不会返回到int(例如
byte
,一切都会好起来
没有为byte
定义移位运算符,因此该值首先提升为int
——这很好,仍然是0000[…]1111
然后向左移位4位,得到0000[…]111000
然后将其转换为字节
,得到字节11110000
然后调用Integer.toBinaryString
,它接受一个int
参数。这意味着字节1111000被转换为int
——在这一点上,它的符号扩展到1111111111 0000(按照),然后被打印出来
选项:
- 不要向下转换到
,这样你就不会返回到字节
(例如,使用int
int shift=right如果你没有转换到
,一切都会很好 没有为字节
定义移位运算符,因此该值首先提升为byte
——这很好,仍然是0000[…]1111 然后向左移位4位,得到0000[…]111000 然后将其转换为int
,得到字节11110000 然后调用字节
,它接受一个Integer.toBinaryString
参数。这意味着字节1111000被转换为int
——在这一点上,它的符号扩展到1111111111 0000(按照),然后被打印出来 选项:int
- 不要向下转换到
,这样就不会最终转换回byte
。(例如,使用int
int shift=right是的,您显式地将其转换为byte,然后隐式地将其转换回int。是的,后一步将其反写为one。是的,您显式地将其转换为byte,然后隐式地将其转换回int。是后一步将其反写为one。
byte right =0xf; // 00001111 System.out.println(Integer.toBinaryString(right)); // 00001111 right = (byte)(right << 4); System.out.println(Integer.toBinaryString(right)); // 11111111111111111111111111110000
- 不要向下转换到