目录
任务描述
程序中所有的数都是以二进制形式存储在计算机中的。例如,a = 13
转化成二进制就是a = 1101
,每一个数称为一位。位运算就是对二进制按位进行运算。本关的任务就是让学习者了解并能运用 Python 中的位运算符来进行运算。
相关知识
Python 中的位运算符包括如下六种:
-
&
:按位与; -
|
:按位或; -
^
:按位异或; -
~
:按位取反; -
<<
:左移动; -
>>
:右移动。
&
按位与
将两个二进制数按位进行逻辑与,对应位都为1
时则结果为1
,否则为0
,最后得出结果。例如,a = 10
,二进制数为a = 1010
,b = 8
,二进制数为b = 1000
,按位与的结果为a & b = 1000
,换成十进制结果为8
。
|
按位或
将两个二进制数按位进行逻辑或,对应位中有一个为1
则结果为1
,两个都为0
则结果为0
,最后得出结果。例如,a = 12
,二进制数为a = 1100
,b = 8
,二进制数为b = 1000
,则其按位或的结果为a | b = 1100
,换成十进制结果为12
。
^
按位异或
将两个二进制数按位进行逻辑异或,对应位不同结果为1
,相同为0
,最后得出结果。例如,a = 12
,二进制数为a = 1100
,b = 8
,二进制数为b = 1000
,则其按位异或的结果为a ^ b = 0100
,换成十进制结果为4
。
~
按位取反
将一个二进制数按位进行取反,当前位为1
,则取反为0
,当前位为0
,则取反为1
,最后得出结果。例如,a = 18
,二进制数为a = 10010
,则其按位取反的结果为~a = 01101
,换成十进制结果为13
。
<<
左移动
将一个二进制数进行左移,就是按二进制形式把所有的数字全部向左移动对应的位数,移动时高位舍弃,低位补零。例如,a = 3
,二进制数为a = 0011
,则其向左移动两位的结果为a << 2 = 1100
,换成十进制结果为12
。
>>
右移动
将一个二进制数进行右移,就是按二进制形式把所有的数字全部向右移动对应的位数,移动时低位舍弃,高位补符号位。例如,a = 4
,二进制数为a = 0100
,则其向右移动两位的结果为a >> 2 = 0001
,换成十进制结果为1
。
如果您想了解更多运算符相关知识,请参考:[美] Katie Cunningham 著《 Python 入门经典》
第二章。
编程要求
本关的编程任务是补全bit.py
文件中的代码,实现如下功能:
-
计算两个输入变量
bitone
、bittwo
按位与的值; -
计算两个输入变量
bitone
、bittwo
按位或的值; -
计算两个输入变量
bitone
、bittwo
按位异或的值; -
计算一个输入变量
bitone
按位取反的值; -
计算一个输入变量
bittwo
左移动两位的值; -
计算一个输入变量
bittwo
右移动两位的值。
本关涉及的代码文件框架如下:
# 定义位运算处理函数bit, 其中bitone和bittwo两个参数为需要进行位运算的变量,由测试程序读入。
def bit(bitone,bittwo):
# 请在此处填入将bitone,bittwo按位与的代码,并将运算结果存入result变量
########## Begin ##########
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位或的代码,并将运算结果存入result变量
########## Begin ##########
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位异或的代码,并将运算结果存入result变量
########## Begin ##########
########## End ##########
print(result)
# 请在此处填入将bitone按位取反的代码,并将运算结果存入result变量
########## Begin ##########
########## End ##########
print(result)
# 请在此处填入将bittwo左移动两位的代码,并将运算结果存入bittwo变量
########## Begin ##########
########## End ##########
print(bittwo)
# 请在此处填入将bittwo右移动两位的代码,并将运算结果存入result变量
########## Begin ##########
########## End ##########
print(result)
测试说明
本关的测试文件是src/step3/bittest.py
文件,测试的具体过程如下:
-
学习者将
src/Step3/bit.py
中的代码补充完毕,然后点击评测。平台自动编译运行bittest.py
,以标准输入方式提供测评输入,并调用在bit
中实现的函数; -
平台获取程序的输出,然后将其与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step3/bittest.py
的样例测试集: 测试输入:
12
6
预期输出:
4
14
10
-13
24
1
开始你的任务吧,祝你成功!
# 定义位运算处理函数bit, 其中bitone和bittwo两个参数为需要进行位运算的变量,由测试程序读入。
def bit(bitone,bittwo):
# 请在此处填入将bitone,bittwo按位与的代码,并将运算结果存入 变量
########## Begin ##########
result=bitone & bittwo
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位或的代码,并将运算结果存入result变量
########## Begin ##########
result=bitone | bittwo
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位异或的代码,并将运算结果存入result变量
########## Begin ##########
result=bitone ^ bittwo
########## End ##########
print(result)
# 请在此处填入将bitone按位取反的代码,并将运算结果存入result变量
########## Begin ##########
result= ~bitone
########## End ##########
print(result)
# 请在此处填入将bittwo左移动两位的代码,并将运算结果存入result变量
########## Begin ##########
result=bittwo << 2
########## End ##########
print(result)
# 请在此处填入将bittwo右移动两位的代码,并将运算结果存入result变量
########## Begin ##########
result=bittwo >> 2
########## End ##########
print(result)