Menu
CoddyTech

AND 运算符

Coddy 位运算 课程的第 5 课,共 17 课。

与( &)运算符

按位与是一种二元运算符,对两个等长的位模式进行运算。如果两个位模式在比较位置上的位都是 1,那么结果位模式中的对应位就是 1,否则就是 0。 '&' 符号表示与运算符。

下表展示了两个位的与运算。

x0011
y0101
x & y0001

我们来看一个例子,更好地理解与运算。

在上面的例子中,我们对 (11)10 和 (6)10 进行了与运算,结果是 (2)10。我们只需将这些数写成二进制形式,然后比较这两位。如果其中有任何一位是 0,就在结果位模式中写入 0。

用法:

int a = 1;
int b = 0;
>> a & b
OUTPUT: 0
challenge icon

挑战

简单

Tim 徒步穿越山洞时,发现了一些石头,上面写着数字。所有石头都按顺序排列。在石头附近,他发现了一本神秘的日记,上面写着这些石头具有魔力,并提到了一些施展魔法的条件。这些条件是:

  1. 魔法石每组有 2 块。
  2. 必须连续选取石头,并且每组不能包含之前选过的石头。 
  3. 第三个条件已经无法辨认。因此,Tim 用这些石头做了实验,发现只有当对一组中出现的数字执行 AND 运算后结果为 0 时,石头才会施展魔法。

找出施展了魔法的那组石头,并输出该组第一块石头上写的数字。 

例如,假设他发现的石头排列如下:

[ 5 , 2 , 3 , 6 , 1 , 9 ]

首先,Tim 将这些石头连续分成不重复的 2 块一组:{ (5,2) , (3,6) , (1,9) }

然后,他对这些组执行 AND( & )运算,发现第一组会施展魔法。5=> (101)2 ,2=>(010)2。这三组中,只有这一组执行 AND 运算后结果为 0。

我们得到的输出是 5,因为要识别这组石头,需要输出组中第一块石头上的数字。

还要注意,所有序列都包含偶数个元素,并且对于给定的序列,始终只有一组会施展魔法。你的挑战是完成函数 "MagicStones",找出 Tim 发现的魔法石组。

亲手试试

#include <iostream>
#include <vector>
using namespace std;

int MagicStones(vector<int> stone_sequence) {
    // 在这里编写代码
}

位运算中的所有课

自己练习: C++ 在线编译器

检查进制转换: 进制转换器