如何使用位级操作(〜^& |>><<),逻辑运算(&&amp ;||但不能使用!)和算术运算(+ - * /)完成此功能(C语言)。
int isZero(int a){
//if a == 0, return 1, if a != 0, return 0
}
要么
bool isZero(int a){
// if a == 0, return true, if a != 0, return false
}
如果,for,for,while语句不能使用,则不能使用==,!=之类的操作。
评论:有人给出解决方案:
boolean isZero(int a) {return a;}
然而,诀窍是如果a等于零,我们需要返回1(或真),我们不能使用!操作
答案 0 :(得分:0)
这样一来,没有被禁止的'运营商。
int isZero(unsigned int n)
{
return (((n | (~n + 1)) >> 31) & 1) ^ 1;
}
答案 1 :(得分:0)
虽然布尔强制转换操作符(bool)x
通常写为!!x
,但也可以将其写为x&&x
(或等效地,x||x
)。一旦将x
强制转换为bool(即0或1),只需将其从1中减去即可反转。所以:
int isZero(unsigned int n) { return 1 - (n&&n); }
当然,如果您不允许算术运算符,您可以使用^
进行反转:
int isZero(unsigned int n) { return 1 ^ (n&&n); }