关于位操作:使用按位和运算符c ++

using bitwise and operator c++

我有以下代码

1
2
3
4
5
6
int n = 50;
while(n) {                         //1
    if(n & 1) cout <<"1" << endl; //2
    //right shift the number so n will become 0 eventually and the loop will terminate
    n >>= 1;                       //3
}

当我们对一个数字使用位和1(&1)时,我们会得到相同的数字。现在我的问题是C++如何评估下面的表达式:N&AMP;1。因为:

1
2
3
4
5
6
7
  n = 50
  In binary form 50 is:            110010
  If we bitwise 1 then we get:  AND     1 = 110010
  Now in c++ (2) the expression evaluates like this:
  Instead of getting the whole sequence of bits (110010) bitwise anded with 1    
  it evaluates only the number of right bits we bitwise. In my example:
  n=50, 110010, use n & 1 ==> 0 AND 1 instead of 110010 AND 1.

C++有这样的理由来处理位和像这样吗?我猜这和编译器有关吗?


维基百科:

The bitwise AND operator is a single ampersand: &. It is just a representation of AND which does its work on the bits of the operands rather than the truth value of the operands. Bitwise binary AND does the logical AND (as shown in the table above) of the bits in each position of a number in its binary form.

在您的示例中,110010&11被认为是000001,然后每个位都是anded,您就得到了结果。实际上,我使用这个方法:1&number来检查偶数和奇数。这就是如何:

1
2
3
4
if(1 & num)
  printf("it is odd");
else
  printf("it is even");

这就是它的工作原理:假设您有一个8位的数字。现在,1的8位符号将是00000001

如果我现在对每一位执行and,那么对于前七位,我将得到0,因为它将是0 & anything将是0。现在,1的最后一位是1。所以,如果我的数字还有最后一个位,如1,那么1 & 1 = 1,如果最后一个位是0,那么1 & 0 = 0

我号码的最后一位是什么时候?那什么时候呢?当转换为十进制形式时,最后一位乘以20。并且,20=1。如果这个1乘以1,我们得到一个奇数,如果乘以0,我们得到一个偶数。


When we use bitwise and 1 (& 1) with a number we get back the same number.

不,我们不知道。我们得到的是由原数和1中的位组成的数。因为只设置了1的最低位,所以结果是原始数字的最低位。

Now my question is how does c++ evaluates the following expression: n & 1.

如果n为50,则为二进制:

1
2
3
n:    110010
1:    000001
n&1:  000000 // no bits set in both

如果n为51,则以二进制表示:

1
2
3
n:    110011
1:    000001
n&1:  000001 // one bit set in both