【问题标题】:How to look at a certain bit in C programming?如何看待 C 编程中的某个位?
【发布时间】:2014-04-07 04:41:31
【问题描述】:

我在试图找到一个函数来查看某个位时遇到了麻烦。例如,如果我有一个二进制数 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;

}

【问题讨论】:

    标签: binary


    【解决方案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);
    }
    

    其中一个或另一个应该可以满足您的需求。祝你好运!

    【讨论】:

    • 你能解释一下面具是什么吗?我真的不明白这两种方法中发生了什么。
    • 已经写了一些很好的解释:stackoverflow.com/questions/10493411/what-is-maskingen.wikipedia.org/wiki/Mask_(computing)。基本上,如果您采用位值1 并将其与另一个值一起使用,如果该值是10 如果该值是0,它将是1。所以你从掩码的结果和你的数据中知道哪些位是1,哪些位是0。希望加上链接能回答问题!
    【解决方案2】:
    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))
        ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2022-07-19
      • 2012-01-28
      • 2010-09-23
      • 2022-10-13
      • 2011-02-02
      • 1970-01-01
      相关资源
      最近更新 更多