[GESP202609 四级 Scratch] 26. 找公共“1”位


【题目描述】
小杨有两个正整数 a 和 b。他想知道这两个数的二进制表示中,哪些位置上的数字都是 1。 二进制位从右往左编号为第 0 位、第 1 位、第 2 位……如果一个数的二进制位数比较少,那么它左边缺少的高位都当作 0。 小知识:二进制就是只用 0 和 1 来表示一个数。我们可以用“除以 2 取余数”的方法来得到它的二进制。
举个例子:把 13 变成二进制
-
13 ÷ 2 = 6 …… 余 1(这是最低位,即第 0 位)
-
6 ÷ 2 = 3 …… 余 0(第 1 位)
-
3 ÷ 2 = 1 …… 余 1(第 2 位)
-
1 ÷ 2 = 0 …… 余 1(第 3 位)
把余数从下往上写:1101,这就是 13 的二进制。
注意:我们是从右往左编号的,所以第 0 位是最右边的那个 1,第 1 位是 0,第 2 位是 1,第 3 位是 1。
再试一个:把 7 变成二进制
-
7 ÷ 2 = 3 …… 余 1(第 0 位)
-
3 ÷ 2 = 1 …… 余 1(第 1 位)
-
1 ÷ 2 = 0 …… 余 1(第 2 位)
结果是 111,也就是第 0、1、2 位都是 1,第 3 位以上都是 0(因为左边高位不足,自动补 0)。
默认小猫角色和白色背景,请你帮小杨计算一下:一共有多少个二进制位,在两个数中同时是 1?把结果存储在变量ans中。
【输入描述】
新建变量“a”,表示第一个正整数。
新建变量“b”,表示另一个正整数。 (1 ≤ a, b ≤ 1000,这样二进制最多只有 10 位,方便计算)
如下图所示:

【输出描述】
新建变量“ans”,用于存储最后的结果(满足条件的二进制位的个数)。
如下图所示:

【输入样例1】
a = 13
b = 7
【输出样例1】
ans = 2
【样例解释1】
-
13 的二进制是 1101(从右往左:第 0 位=1,第 1 位=0,第 2 位=1,第 3位=1)
-
7 的二进制是 0111(第 0 位=1,第 1位=1,第 2 位=1,第 3 位=0,因为 7只有3位,第3位补0)
-
共有 2 个位(第0位和第2位)在两个数中都是1,所以答案是 2。
【输入样例2】
a = 8
b = 4
【输出样例2】
ans = 0
【样例解释2】
-
8 的二进制:1000(第3位=1,其余为0)
-
4 的二进制:0100(第2位=1,第3位补0)
-
没有一位同时是1,答案为0。
注意事项:
1.变量名的拼写(包括大小写)要和题目完全一致(建议直接从题目中复制变量名,避免自己打字时弄错大小写或拼写)。
2.输入变量直接赋值即可,无需使用“询问并等待”积木块。
3.输出结果存放在对应变量中即可,无需使用“说…”或“说…,2 秒”积木块。