在Java中对0xFF使用按位and运算符的原因

在Java中对0xFF使用按位and运算符的原因,java,bitwise-and,Java,Bitwise And,我正在进行c类型(u8、s16、u32等)到java的转换(只是一个包含布尔符号和长值的类)。当然,比特数的长度 例如:u8 签名=假 长度=8 但是,在将类型转换为int[] 这是: int[] ret = new int[length / 8]; for (int i = 0; i < ret.length; i++) { ret[ret.length - 1 - i] = (char) (0xff & (value >> ((ret.length - i -

我正在进行c类型(u8、s16、u32等)到java的转换(只是一个包含布尔符号和长值的类)。当然,比特数的长度

例如:u8 签名=假 长度=8

但是,在将类型转换为int[]

这是:

int[] ret = new int[length / 8];
for (int i = 0; i < ret.length; i++) {
  ret[ret.length - 1 - i] = (char) (0xff & (value >> ((ret.length - i - 1) * 8)));
}
int[]ret=newint[length/8];
对于(int i=0;i>((ret.length-i-1)*8));
}
例如,值=7;长度=8

0xff&()可以完成什么?自

0xff仅为1111111,7为0000 0111 =>结果0000 0111


或者这里发生了其他事情?

0xFF选择int的前8位。因此,如果值是int,则选择前8位,这就是您需要它的原因:如果int包含超过8位,则可以使用此bytemask选择它们。值>>填充将感兴趣的位从当前位置移动到前8个位置,以便bytemask可以选择它们。

0xff
表示带符号的
int
值!7不是0000 1000也不是它的0000 0111thx Jim;我要换它;我理解有符号右移位部分,但是;你说0xFF选择整数的前8位;但是如果没有0xFF,会有什么不同呢?如果没有选择,我看不到它。字符的上半部分——其他8位——将包含int中的数据,但在掩码中,这些位都是0。