连接两个整数的二进制表示

Concatenate binary representation of two ints

假设我们有两个 int 变量,AB,位长度分别为 N < 16M < 16。 我们想要一个新的 int 变量 C,这样 N 最低位包含 A 的位,接下来的 M 位包含 B 的位. (假设所有变量都是 32 位长和小端)。

在我的解决方案中,我通过使用二进制字符串来稍微作弊:

int a = 65535;
int b = 65;
String cStr = Integer.toBinaryString(b) + Integer.toBinaryString(a);
int c = Integer.parseInt(cStr, 2);

但是,如何使用按位运算符来实现?

示例:

A=1, B=1 (N=1, M=1 resp.) then C = 11 A = 11000011010100, B = 101100 (N=14, M=6 resp.) then C = 10110011000011010100

试试这个并检查是否有相同的值。我不确定它在 java 中的表现如何,但这适用于 C++ 和 C# 整数 c = b << 16 |一个;

首先你应该计算要移动多少 b。所以:

int a = 65535;
int count = 0;
int temp = a;
while(temp != 0)
{
  ++count;
  temp = temp >> 1;
}

int b = 65;
int c = b << count | a;

在Java中:

c = b << 16 | a;

但是如果你想移动确切的位数:

c = b << (32 - Integer.numberOfLeadingZeros(a)) | a;