如何在不使用逻辑否定或控制结构的情况下确定整数是否为零

时间:2014-05-24 14:50:35

标签: c binary

如何使用位级操作(〜^& |>><<),逻辑运算(&&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(或真),我们不能使用!操作

2 个答案:

答案 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); }