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

问题描述 投票:3回答:2

假设我们有两个int变量,分别是位长ABN < 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 bit-manipulation bit-shift
2个回答
6
投票

我是Java:

c = b << 16 | a;

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

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

-1
投票

试试这个并检查你是否有相同的价值。我不确定它在java中会是怎样的,但这对C ++和C#int 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;
© www.soinside.com 2019 - 2024. All rights reserved.