将字节转换为十六进制时,使用'&'运营商。我想知道它的作用?
byte[] b="ABC".getBytes();
System.out.println(b[1] & 0xFF);
它给出输出66,因为它是'B'的ASCII值 欢迎任何帮助。 感谢。
答案 0 :(得分:1)
此代码与字节到十六进制转换无关。
b[1]
可以为负数,因为Java中的字节值介于-128到127之间。
b[1] & 0xFF
强制将输出解析为正整数。
例如,如果b[1]
等于-14,b[1] & 0xFF
会给你242,因为在两个参数被提升为int
类型之后执行逐位AND,因此,当您使用&
执行0xFF
时,其二进制表示形式为000...00011111111
,您将始终获得正面结果。
答案 1 :(得分:0)
&
运算符(如果在整数上使用,如byte,short,int,long)是Logic-AND运算符。逻辑AND运算符如下所示:
0 1 1 0 0 1 0 1
& 1 0 1 1 0 0 0 1
-----------------
0 0 1 0 0 0 0 1
这是2位数的二进制表示法的逐位比较。如果两个位都为1,则结果为1,否则将导致0:
& || 0 | 1 <- a
===========
0 || 0 | 0
===========
1 || 0 | 1
^
b