条件语句如何与位的操作员一起使用

How does condition statement work with bit-wise operators?

本文关键字:操作员 一起 语句 条件      更新时间:2023-10-16

我试图了解条件是否与位操作员一起使用。一种检查一个数字是否甚至可以通过:

完成的方法
#include <iostream>
#include <string>
using namespace std;
string test()
{
    int i = 8;  //a number
    if(i & 1)
      return "odd";
    else
      return "even";       
}
int main ()
{
  cout << test();
  return 0;
}

我不明白的部分是条件如何工作。在这种情况下,如果i = 8,则在if语句中进行1000 & 1,它应该退还1000等于8。

如果i = 7,则在if语句中应进行 111 & 1,它给出111等于7

为什么如果(8)会返回"甚至",如果(7)返回"奇数"?我想我想了解IF语句正在检查是正确的,以及在与位的操作员打交道时是错误的。

当我写下这个问题时,一个想法是因为它实际上是在做

for 8: 1000 & 0001 which gives 0
for 7: 0111 & 0001 which gives 1?

是的,您在最后一部分。二进制&|进行一点执行。因为

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

我们可以看到:

8 & 1 == 1000 & 0001 == 0000

7 & 1 == 0111 & 0001 == 0001

您的test函数确实正确地计算了一个数字是偶数还是奇怪,因为a & 1测试了1S位置中是否有1,仅适用于奇数。

实际上,在C,C 和其他主要编程语言中,&操作员在每个位中对整体类型中的AND操作进行CC_9操作。当且仅当两个操作数的第n位等于1时,位于位AND中的第n位等于1。

例如:

8 & 1 =
1000 - 8
0001 - 1
----
0000 - 0
7 & 1 =
0111 - 7
0001 - 1
----
0001 - 1
7 & 5 =
0111 - 7
0101 - 5
----
0101 - 5

因此,在偶数数字和1之间进行位于位的AND始终是 0,因为只有奇数数字最小的位等于 1

if(x) in C 将x转换为布尔值。整数被认为是 true iff,它是非零的。

因此,所有if(i & 1)都在检查,以查看i中是否设置了最不重要的位。如果设置了,则i&1将是非零的;如果未设置,则i&1为零。

整数IFF中设置的最低显着位是奇怪的,因此 i&1 iff i是奇数的。

您所说的代码正在做的实际上是位于位的操作员应该如何工作。在您的示例中(8&amp; 1):

1000 & 0001 = 0000

因为在第一个值中,最后一个位设置为0,而在第二个值中,最后位设置为1。0&amp;1 = 0。

0111 & 0001 = 0001

在两个值中,最后位设置为1,因此结果为1,因为1&amp;1 =1。

表达式i & 1,其中iint,具有int类型。它的值是10,具体取决于i的低位值。在语句 if(i & 1)中,该表达式的结果遵循整数类型的通常规则: 0变为 false,而非零为 true