【问题标题】:Why the if statement is false as ~0 is 1 which is 1==1 should be true?为什么 if 语句为假,因为 ~0 是 1,即 1==1 应该为真?
【发布时间】:2021-06-08 02:15:16
【问题描述】:
#include <stdio.h>

int main() {
    if (~0 == 1)  
        printf("yes\n");
    else
        printf("no\n");
}

为什么if 声明是错误的?谁能解释一下?

【问题讨论】:

  • 试试printf("%d\n", ~0);,亲自看看。
  • 这是错误的,因为~0 不是1。您是否尝试了解 ~ 的实际作用?
  • 您混淆了!~ 运算符。试试if (!0 == 1) ...

标签: c bitwise-operators tilde


【解决方案1】:

~0 等于 -1,而不是 1。

【讨论】:

  • 在二补机上,是的。但这不是唯一的选择。
  • @klutt:鉴于stackoverflow.com/questions/12276957/…,我并不特别担心。
  • 是的,这在其他事物中并不常见。但是,当很容易纠正时,您的答案不仅严格地说是错误的。它也根本没有解释 ~ 的实际作用。
【解决方案2】:

~ Binary One 的补码运算符是一元的,具有“翻转”位的效果。

所以当您执行~0 == 1 时,它会检查-1 == 1 是否为假

【讨论】:

  • 结果-1真的有保证吗?
  • 不,这取决于您在此运算符之后使用~ 的数字。
  • 负数的两个补码表示当然是这样,但这不是唯一的选择。
  • 如果我没记错的话,~0 将在一个补码机器上产生 0(或者对我来说更准确的 -0),在具有符号幅度表示的机器上产生 -INT_MAX
  • 我没看错。 en.wikipedia.org/wiki/…
猜你喜欢
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
相关资源
最近更新 更多