Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Binary 如何看待C编程中的特定位?_Binary - Fatal编程技术网

Binary 如何看待C编程中的特定位?

Binary 如何看待C编程中的特定位?,binary,Binary,我很难找到一个函数来查看某个位。例如,如果我有一个二进制数1111111111011,我只想看最重要的位(一直到左边的位,在这个例子中是1),我可以用什么函数来看那个位 该程序用于测试二进制数是正数还是负数。我首先使用十六进制数0x0005,然后使用2的补语函数使其为负数。但是现在,我需要一种方法来检查第一位是1还是0,并从中返回一个值。整数n将等于1或0,这取决于它是负的还是正的。我的代码如下: #include <msp430.h> signed long x=0x0005;

我很难找到一个函数来查看某个位。例如,如果我有一个二进制数1111111111011,我只想看最重要的位(一直到左边的位,在这个例子中是1),我可以用什么函数来看那个位

该程序用于测试二进制数是正数还是负数。我首先使用十六进制数0x0005,然后使用2的补语函数使其为负数。但是现在,我需要一种方法来检查第一位是1还是0,并从中返回一个值。整数n将等于1或0,这取决于它是负的还是正的。我的代码如下:

#include <msp430.h> 
signed long x=0x0005;
int y,i,n;
void main(void)
{
    y=~x;
    i=y+1;

}
#包括
有符号长x=0x0005;
int y,i,n;
真空总管(真空)
{
y=~x;
i=y+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校验位(int编号,int位索引){

返回号码&(1)你能解释一下掩码是什么吗?我真的不太明白这两种方法中的任何一种。已经有一些很好的解释了:或者。基本上,如果你取位值
1
,然后用另一个值来表示,如果该值是
1
,那么它将是
1
,如果该值是
0
。因此,您可以从掩码的结果和您的数据中知道哪些位是
1
,哪些位是
0
。希望加上链接可以回答这个问题!
if (isSetBit (y, sizeof (y) * 8 - 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);
}