Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
C 有没有办法用位检查来检查一个数字是否等于1?_C_Binary_Bit Manipulation_Bit - Fatal编程技术网

C 有没有办法用位检查来检查一个数字是否等于1?

C 有没有办法用位检查来检查一个数字是否等于1?,c,binary,bit-manipulation,bit,C,Binary,Bit Manipulation,Bit,这不仅仅是一个有趣的问题——我不确定它实际上如何适用。无论如何-是否可以使用位检查来查看数字是否等于1?我不确定问题的确切含义,但您可以使用中的任何一个!(x^1)或x==1或!(x-1)或(x&1)&!(x&~1)或许多其他方法中的一种。我不确定问题的确切含义,但您可以使用任何一种方法!(x^1)或x==1或!(x-1)或(x&1)&!(x&~1)或许多其他方法中的一种。我不太理解位检查。如果您的意思是逐个检查位,则可以在循环中执行该操作。或者您可以使用以下代码: int equalsOne(

这不仅仅是一个有趣的问题——我不确定它实际上如何适用。无论如何-是否可以使用位检查来查看数字是否等于1?

我不确定问题的确切含义,但您可以使用
中的任何一个!(x^1)
x==1
!(x-1)
(x&1)&!(x&~1)
或许多其他方法中的一种。

我不确定问题的确切含义,但您可以使用任何一种方法!(x^1)或
x==1
!(x-1)
(x&1)&!(x&~1)
或许多其他方法中的一种。

我不太理解位检查。如果您的意思是逐个检查位,则可以在循环中执行该操作。或者您可以使用以下代码:

int equalsOne(int a) {
    return (a && (a == !!a));
}

运算符将返回
0
,否则
1
。return语句中的前导
a
消除了
a==0

我不太理解位检查的情况。如果您的意思是逐个检查位,则可以在循环中执行该操作。或者您可以使用以下代码:

int equalsOne(int a) {
    return (a && (a == !!a));
}

运算符将返回
0
,否则
1
。return语句中的前导
a
消除了
a==0
的情况,我认为(1==number)是否足够。在内部,一个逐位的比较是经过修改的。

我认为(1==数字)是否足够。从内部看,按位比较是经过修改的。

@tomeralazy:该检查也通过了0。CPU总是以任何方式处理位,因此任何方法都会被修改。您所说的“使用位检查”到底是什么意思?像
((x^1)>>31)|((x^1)>>31)
这样的东西算“使用位检查”吗?@harold这就是我想要寻找的,是的。
如果(n==1)
检查最低位是否为1,其余是否为0。@TomerArazy:该检查也通过了0。CPU总是以任何方式处理位,那么,任何方法都将被定义为“使用位检查”的确切含义是什么?像
((x^1)>>31)|((x^1)>>31)
这样的东西算是“使用位检查”吗?@harold这就是我要寻找的,是的。
如果(n==1)
检查最低位是否为1,其余为0。通常,比较是由一条执行减法的指令实现的,该指令设置了几个描述结果的位(负、零、溢出、进位)。因此,
1==number
很可能导致实际的算术运算,而不仅仅是按位比较。通常,比较是通过执行减法并设置描述结果的若干位(负、零、溢出、进位)的指令来实现的。因此,
1==number
很可能导致实际的算术运算,而不仅仅是按位比较。