“&”运算符在字节到十六进制转换中的作用是什么?

What is the role of '&' operator in byte to hex conversion?

在将字节转换为十六进制时,使用了“&”运算符。我想知道它有什么作用?

byte[] b="ABC".getBytes();
System.out.println(b[1] & 0xFF);

它给出输出 66,因为它是 'B' 的 ASCII 值 欢迎任何帮助。 谢谢

& 运算符(如果用于整数,如 byte、short、int、long)是逻辑与运算符。逻辑与运算符的工作方式如下:

  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

此代码与字节到十六进制的转换无关。

b[1] 可以是负数,因为 Java 中的字节值介于 -128 和 127 之间。

b[1] & 0xFF 强制将输出解析为正整数。

例如,如果 b[1] 等于 -14,则 b[1] & 0xFF 将为您提供 242,因为在将两个参数提升为 int 之后执行按位与运算类型,所以当你用0xFF执行&时,它的二进制表示是000...00011111111,你总是会得到一个肯定的结果。