如何获取负数的最后 16 位二进制数字并将它们连接起来?
How to get last 16 binary digits of a negative number and concatenate them?
我正在研究一些按位运算符,我想提取数字的最后 16 位二进制数字并对它们进行运算。我基本上想看到一个像 0xFFFFFFFF 这样的负整数,然后提取 LSB FFFF
并将它们与 0
连接起来,这样我最终得到一个零,这样它看起来像 0x0000FFFF
。我只关心较小的负数,所以 LSB 应该是我需要的所有信息。
这是我在 C 中的方法:
#include <stdio.h>
int main(){
int a = -1, c = 0;
short b = (short)a;
printf("a is %x\nb is %x",a,b);
c = (0 << 16) | b;
printf("\nc is %x\n", c);
return 0;
}
我的想法是,我可以将我的 int a
转换为短片,这样它看起来像 FFFF
而不是 FFFFFFFF
我会玩得更开心。对我来说不幸的是,这只是为变量
打印出ffffffff
您所拥有的不起作用,因为按位或运算符 (|
) 设置了任一操作数中设置的任何位。
您想使用按位与运算符 (&
) 来屏蔽不需要的位。这将清除任一操作数中清除的任何位。
改变这个:
c = (0 << 16) | b;
为此:
c = b & 0xFFFF;
你的输出将是:
a is ffffffff
b is ffffffff
c is ffff
我正在研究一些按位运算符,我想提取数字的最后 16 位二进制数字并对它们进行运算。我基本上想看到一个像 0xFFFFFFFF 这样的负整数,然后提取 LSB FFFF
并将它们与 0
连接起来,这样我最终得到一个零,这样它看起来像 0x0000FFFF
。我只关心较小的负数,所以 LSB 应该是我需要的所有信息。
这是我在 C 中的方法:
#include <stdio.h>
int main(){
int a = -1, c = 0;
short b = (short)a;
printf("a is %x\nb is %x",a,b);
c = (0 << 16) | b;
printf("\nc is %x\n", c);
return 0;
}
我的想法是,我可以将我的 int a
转换为短片,这样它看起来像 FFFF
而不是 FFFFFFFF
我会玩得更开心。对我来说不幸的是,这只是为变量
ffffffff
您所拥有的不起作用,因为按位或运算符 (|
) 设置了任一操作数中设置的任何位。
您想使用按位与运算符 (&
) 来屏蔽不需要的位。这将清除任一操作数中清除的任何位。
改变这个:
c = (0 << 16) | b;
为此:
c = b & 0xFFFF;
你的输出将是:
a is ffffffff
b is ffffffff
c is ffff