C 有没有办法用位检查来检查一个数字是否等于1?
这不仅仅是一个有趣的问题——我不确定它实际上如何适用。无论如何-是否可以使用位检查来查看数字是否等于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(
中的任何一个!(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));
}
对于非零值,code>运算符将返回0
,否则1
。return语句中的前导a
消除了a==0
我不太理解位检查的情况。如果您的意思是逐个检查位,则可以在循环中执行该操作。或者您可以使用以下代码:
int equalsOne(int a) {
return (a && (a == !!a));
}
对于非零值,code>运算符将返回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
很可能导致实际的算术运算,而不仅仅是按位比较。