连接两个整数的二进制表示
Concatenate binary representation of two ints
假设我们有两个 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++ 和 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;
假设我们有两个 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++ 和 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;