我在尝试查找某个功能时遇到了麻烦。例如,如果我的二进制数为1111 1111 1111 1011,我想只看一下最重要的位(左边的位,在这种情况下为1)我可以使用什么函数来查看在那一点?
该程序用于测试二进制数是正数还是负数。我开始使用十六进制数0x0005,然后使用二进制补码函数使其为负数。但现在,我需要一种方法来检查第一位是1还是0并返回一个值。整数n将等于1或0,具体取决于它是负还是正。我的代码如下:
#include <msp430.h>
signed long x=0x0005;
int y,i,n;
void main(void)
{
y=~x;
i=y+1;
}
答案 0 :(得分:1)
过去我有两种主要方式做过这样的事情。第一个是位掩码,如果你总是检查完全相同的位,你将使用它。例如:
#define MASK 0x80000000
// Return value of "0" means the bit wasn't set, "1" means the bit was.
// You can check as many bits as you want with this call.
int ApplyMask(int number) {
return number & MASK;
}
第二个是移位,然后是一个掩码(用于获取任意位):
int CheckBit(int number, int bitIndex) {
return number & (1 << bitIndex);
}
其中一个或另一个应该做你想要的。祝你好运!
答案 1 :(得分:0)
bool isSetBit (signed long number, int bit)
{
assert ((bit >= 0) && (bit < (sizeof (signed long) * 8)));
return (number & (((signed long) 1) << bit)) != 0;
}
检查符号位:
if (isSetBit (y, sizeof (y) * 8 - 1))
...