【问题标题】:reason for using bitwise and operator on 0xFF in Java在 Java 中对 0xFF 使用按位和运算符的原因
【发布时间】:2013-07-27 20:38:44
【问题描述】:

我正在做 c 类型 (u8, s16, u32,..) - 到 java 的转换(只是一个包含布尔符号和 long 值的类)。当然还有位数的长度。

例如: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)));
}

例如值=7;长度=8

0xff & () 能做什么?因为

0xff 只是 1111 1111 而 7 是 0000 0111 => 结果 0000 0111

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

【问题讨论】:

  • 0xff代表签名int值!
  • 7 不是 0000 1000 也不是 0000 0111
  • 谢谢吉姆;我会改的

标签: java bitwise-and


【解决方案1】:

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

【讨论】:

  • 谢谢;我理解带符号的右移位部分,但是;你说 0xFF 选择 int 的前 8 位;但是如果没有 0xFF 会有什么区别呢?我看不到它
  • 如果没有选择,char 的上半部分 - 其他 8 位 - 将包含来自 int 的数据,但使用掩码这些位都是 0。
猜你喜欢
  • 1970-01-01
  • 2013-07-25
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-16
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多