【问题标题】:At Least One bit in int num is 0int num 中的至少一位为 0
【发布时间】:2016-05-12 02:38:03
【问题描述】:

尝试创建一个方法,如果输入 int num 中包含零,则使用 C 语言创建一个返回 1 的方法,而不使用 if-else 语句并使用底部的位和布尔运算符。

到目前为止我已经试过了:

int hasAZero(int num){
 return !(num && 1);
}

Bitwise AND (c = a & b) – c has 1s in the places where both of the    corresponding bits in a and b are 1.
Bitwise OR (c = a | b) – c has 1s wherever at least one of the corresponding bits in a and b is 1.
Bitwise XOR (c = a ^ b) – c has 1s wherever one and only one of the corresponding bits in a and b is 1.
Bitwise NOT (c = ~a) – c is a, with each bit inverted, else c is 0.
Right shift (c = a >> b) – c is a, with each bit moved lower b places.
Left shift (c = a << b) – c is a, with each bit moved higher b places.
Boolean AND (c = a && b) – c is 1 if both a and b are non-zero.
Boolean OR (c = a || b) – c is 1 if either a and b are non-zero.
Boolean NOT (c = !a) – c is 1 only if a is 0.

【问题讨论】:

  • 好吧,num &amp;&amp; 1 总是非零,所以逻辑逆总是为零。不是很有用。为什么不直接使用~num != 0。如果您不想使用!=,那么您可以使用!!~num
  • !!~num 只使用那些操作
  • 澄清一下,您正在寻找一个 0 bit,对吗?不是像基诺的答案那样的十进制数字吗?
  • 您能否详细说明“其中包含零”的含义?给出一些满足这个性质的例子,还有一些不满足的例子。你写了&amp;&amp; 1 (意思是“……和真”),这不是按位运算。想想你要测试什么,以及你将如何在现实生活中测试它。

标签: c


【解决方案1】:

如果我正确理解您的问题,您想检查整个整数或数字“字符串”中是否有零?例如。 13590

为此,您需要使用循环检查每个数字并查看该数字是否等于零。这是一种方法。

int hasAZero(int num) {
    int val = num;

    while (val >= 10) {
        if ((val % 10) == 0) {
            return 1;
        }
        val = val / 10;
    }

    return 0;
}

【讨论】:

  • 我认为 OP 在整个 int 中寻找一个 0 位,所以这个答案无济于事。
  • @Tom 哦,我想我没有完全理解他的问题。
【解决方案2】:

试试这个:

int hasAZero(int num) {
    return ~num != 0;
}

如果num 包含一个零位,那么它的按位补码将包含一个1 位并且非零。如果它不包含零位,则其补码将为零。

如果您不想使用!=,那么您可以使用!!~num,正如rpattiso 指出的那样(我不清楚是否允许比较),即:

int hasAZero(int num) {
    return !!~num;
}

【讨论】:

  • 负值似乎会带来问题。按位运算不应该限于无符号值吗?
  • @David Unsigned 可能更可取,但我认为按位补码也应该适用于有符号整数。这个函数应该返回 false 的唯一时间是如果 num 全部是 1s,即 -1(或者,对于未签名,它将是 0xffff....)。我想您可以将其称为~0
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 2019-08-31
  • 2022-01-13
相关资源
最近更新 更多