【问题标题】:Can I use bitwise operators instead of conditional operators in C? [duplicate]我可以在 C 中使用位运算符而不是条件运算符吗? [复制]
【发布时间】:2016-10-01 00:37:51
【问题描述】:

我可以使用 & 和 |而不是 && 和 ||在 C 语言家族中?这当然不适用于对象。有什么区别吗?如果没有,那为什么条件运算符存在?

例如:

if (3 && 5) // true
if (3 & 5) // also true

【问题讨论】:

  • 位运算符不会短路。
  • 位运算符和逻辑运算符是不同的。 “代替”是什么意思?展示一些例子
  • 短路是一个很大的区别。
  • 1 && 2 为真,1 & 2 为 0(假)
  • &&& 运算符之间存在巨大差异。例如:0x01 & 0x1000x01 && 0x101

标签: c syntax bitwise-operators conditional-operator


【解决方案1】:

正如 cmets 中指出的那样:

1 && 2 为真,1 & 2 为假。

还有,

位运算符不会短路。

【讨论】:

  • truefalse 都不是 C 关键字。
  • @AndrewHenle:这就是为什么它们在我的回答中没有以固定字体出现。
  • WT...我第一次看到“wiki”答案。怎么办?
  • @LPs:答案文本框的右下角有一个复选标记。您不会从答案中获得代表,而是将其打开供所有人编辑。
  • @AndrewHenle:多年来,我们一直使用“true”作为 C 语言中“不等于 0”的通俗同义词,因为没有 true具有更明确含义的关键字...(当然,现在有<stdbool.h>定义 true1...)
【解决方案2】:

逻辑运算符和位运算符是完全不同的。逻辑运算符返回一个布尔值(0 或 1),而位运算符基于逐位应用该位运算符返回一个整数。示例:15 & 8 = 8,而 15 && 8 = 1。从语法上讲,您可以使用位运算符代替逻辑运算符,但从语义上讲这是错误的。

【讨论】:

    【解决方案3】:
    if (3 & 5) // also true
    

    是的,因为按位计算 & 的结果是 1

    使用 8 位:

    0b00000101 &
    0b00000011
    ------------
    0b00000001
    

    但是if ( 2 & 5 )

    0b00000010 &
    0b00000101
    ------------
    0b00000000
    

    所以它是falseif ( 2 && 5) 仍然是true;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 2020-05-15
      • 2015-07-19
      相关资源
      最近更新 更多