java - java 按位或错误

标签 java int bit-manipulation

变量intVar是原始int,bb[]是字节数组{0x02,0xF7,0x8B,0xF9};

  intVar = bb[0];
  //intVar = 00000002    
  intVar <<= 8;
  //intVar = 00000200
  intVar |= bb[1];
  //intvar = fffffff7

为什么???

最佳答案

原因是符号扩展。使用:

  intVar = 0xFF & bb[0];
  //intVar = 00000002    
  intVar <<= 8;
  //intVar = 00000200
  intVar |= 0xFF & bb[1];
  // intVar = 000002F7

使用负字节(java字节有符号)作为int会产生负int,并且因为java使用二进制补码,所以所有前导位都将为1。使用0xFF将得到最低8位中的字节和 24 个前导 0。

关于java - java 按位或错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13947998/

相关文章:

java - 如何查找数组中整数的长度

python - 将 int 数组转换为 chars 数组 - Python

java - 从短裤中获得 8 条短裤

java - 在 Selenium Web 驱动程序中使用 TestNG 时方法调用两次

java - 格式化一个java骰子滚动程序?

java - 我该如何做出这个 if 语句?

c++ - 位左移

c++ - C 无符号 64 位整数的种群计数,最大值为 15

java - 好还是坏——使用构造函数从远程 web 服务初始化模型

java - Android - 从 ArrayList 中删除项目