java - 如何在Java中组合2个字节的位?

标签 java byte bit-manipulation bitwise-operators bit-shift

我有 1 个数字,需要 9 位,这些位分布为 2 个字节(最高有效字节和最低有效字节)。
MSB 类似于:

0?????[Bit8][Bit7]

LSB 如下:

0[Bit6][Bit5][Bit4][Bit3][Bit2][Bit1][Bit0]  

我的号码由 Bit0 到 Bit8 9 位组成。 ? 表示 1 或 0。

那么,我如何获得我的电话号码?
我可以想到将 MSB 中的位左移 7 位,然后将其与 LSB 组合起来形成一个 16 位数字。但是,当MSB左移7位时,如何避免丢失Bit8呢?

最佳答案

在这种情况下,Java 按位运算符是在 32 位整数上完成的,因此当您向左移动时不会丢失 [bit8]。

    int msb = 0xFF;
    int lsb = 0xFF;
    int result = ( ( msb & 0x3 ) << 7 ) | ( lsb & 0x7F );
    System.out.println(result == 0x1FF);

关于java - 如何在Java中组合2个字节的位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18236560/

相关文章:

java - Java 中的资源分配器

java - 解析动态 json

c - 用C写十六进制(字节)

algorithm - 提取 ASCII 整数的前 32 位

C++ - 将 int 拆分为两个较小的数据类型

java - Java中字符串的两个字符互相替换

Java Mockito.when 以 StringBuilder 作为参数失败

java - Camel "activemq component"的性能问题

java - Java 中字节不显示加法结果

c#将字节转换为字符串并写入txt文件