如何在C编程中看一下?

时间:2014-04-06 20:31:11

标签: binary

我在尝试查找某个功能时遇到了麻烦。例如,如果我的二进制数为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;

}

2 个答案:

答案 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))
    ...