c# - (id & 12) 评估什么?

标签 c# if-statement evaluation

我明白这是一个简单的问题。谁能解释下面的“如果”是做什么的。 让我们假设 id = 0;

private bool item;

if (item = ((id & 12) == 12))
    ret = 1;
  1. (id & 12) 的计算结果是否为 (0+12)?如果是,12 == 12 变为 true。
  2. 这是否检查 item 是否等于 true?

最佳答案

& 是按位 and 运算符。它只保留那些在两个操作数中都为 1 的位。

  • 0 & 0 == 0
  • 0 & 1 == 0
  • 1 & 0 == 0
  • 1 & 1 == 1

二进制中的 12 是 1100,二进制中的 0 是 0000,所以 0 & 12 == 0

哪个输入给你 12?好吧,任何设置了位 2 和位 3 的输入,例如 1111 (15, 0xF)、1101 (13, 0xD)、1110 (14, 0xE),当然还有 1100 (12, 0xC) 本身。但许多其他输入也是可能的,例如11100 (28, 0x1C) 或 11101 (29, 0x1D)。

用十六进制表示法编写更紧凑,更容易查看输入是否匹配。十六进制的 12 是 0xC。任何其他在最低有效位置带有 CDEF 的十六进制数都将满足您的条件.

请注意,0101 (5) 等输入将无法通过测试,因为 0101 & 1100 == 0100 (5 & 12 == 4)。

item 被赋值为按位 and 的结果,然后将此结果用作 if 语句的条件。

关于c# - (id & 12) 评估什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74647104/

相关文章:

c# - 在辅助类中使用静态方法与非静态方法

c# - 如何通过 AutoMapper 将匿名对象映射到类?

Java 方法未在 if 语句中求值

c++ - 表达式的求值顺序

php - 一种整理 PHP 代码的方法

machine-learning - 如何评价一个具有相关顺序的建议系统?

c# - ValidateRequest 每个控件

c# - session 变量引用后的问号 (?) - 这是什么意思

if-statement - CMake错误 "if given arguments"后跟括号, "NOT", "EQUALS"等

javascript - 我如何优化这一长行 "if"语句?