假设我们有两个int变量,分别是位长A
和B
的N < 16
和M < 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 = b << 16 | a;
但是如果你想要按照确切的位数移动:
c = b << (32 - Integer.numberOfLeadingZeros(a)) | a;
试试这个并检查你是否有相同的价值。我不确定它在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;