Java 按位运算

标签 java

我有这行代码

int b1 = 0xffff & (content[12]<<8 | 0xff & content[11]);

我有一个小字节序的 bytearray (content[]),需要重新创建一个 2 字节的值。这段代码很好地完成了工作,但在测试之前我是这样写的

int b1 = 0xffff & (content[12]<<8 | content[11]);

结果不对。我的问题是为什么在这种情况下需要 0xff?

最佳答案

0xff是必要的,因为有两个因素:

  1. Java 中的所有整数类型都是有符号的
  2. 所有按位运算符都将其参数提升为 int (或 long,如有必要)在行动之前。

结果是如果content[11]的高位被设置,它将被符号扩展为负数 int值(value)。然后你需要 &这与 0xff将其返回到(正)字节值。否则当你|结果为 content[12]<<8 , 高位字节全为1。

关于Java 按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15818800/

相关文章:

java - StringBuilder 和 StringBuffer 的区别

java - 从服务中获取错误的输出

java - 配对蓝牙设备时出现 NullPointerException

java - JarSplice 的命令行参数?

java - 突出显示字符串中的 IP 地址

Java:类 <?> 与类

java - PDF/A生成中字体编码的问题

java - JSP 未检测到 javascript 文件

java - android列出 Assets 子目录文件的权限

java - 按字母顺序排序arraylist(不区分大小写)