day07-作业
2019-01-02 本文已影响0人
馒头不要面
1.使用位运算判断一个数是否是奇数
n = int(input("请输入一个整数:"))
if n & 1 == 1:
print(n,"为奇数")
else:
print(n,"为偶数")
2.表达式0x13 & 0x17的值是( )
# 先把十六进制转换为二进制
0x13 = 000010011(原) = 000010011(反) = 000010011(补)
0x17 = 000010111(原) = 000010111(反) = 000010111(补)
0x13 & 0x17 = 000010011 & 000010111 = 000010011 = 19
3.若x=-20,y=3则x&y的结果是( )
# 先把x,y用二进制表示
x = -20 = 110100(原) = 101011(反) = 101100(补)
y = 3 = 000011(原) = 000011(反) = 000011(补)
x & y = 101100 & 000011 = 000000(补) = 000000(反) = 000000(原) = 0
4.表达式 -97 | 120 的运算结果是()
# 先把-97和120用二进制表示
-97 = 11100001(原) = 10011110(反) = 10011111(补)
120 = 01111000(原) = 01111000(反) = 01111000(补)
-97 | 120 = 10011111 | 01111000 = 11111111(补) = 11111110(反) = 10000001 = -1
5.在位运算中,操作数每右移一位,其结果相当于( B )
按位运算中,操作数每右移一位,相当于原数整除2
A.操作数乘以2 B.操作数除以2
C.操作数除以4 D.操作数乘以4
6.设x 是一个整数(16位).若要通过x|y使x低8位置1,高8位不变,则y的二进制数是( )
因为正数的原码、反码、补码三码合一,
因为1 | 0 = 1, 1 | 1 = 1,所以低8位置1,则低8位全为1,
因为0 | 0 = 0, 1 | 0 = 1,所以高8位不变,则高8为全为0,
所以y的二进制数为:00000000 11111111
7.总结常用的位运算使用技巧(自己查自己,觉得好用记得住的)
技巧一:用&来关闭某位的值
例如:我们想要关闭a数中的第4位,而又不影响其它位的现状,可以用一个数0xF7,即二进制数11110111去与a数作按位“与”运算
0x88 10001000 a数
&
0xF7 11110111 屏蔽数
=10000000
技巧二:用|来开启某位的值
例如:我们想要开启a数中的第4位,而又不影响其它位的现状,可以用一个数0xF7,即二进制数00001000去与a数作按位“或”运算
0x80 10000000 a数
&
0xF7 00001000 开启数
=10001000
技巧三:用^直接交换两个变量的值
如,若有变量a=3,b=4,想要交换它们的值,可以做如下一组操作:
a^=b
b^=a
a^=b
首先,a^=b:
a 00000011
^
b 00000100
a=00000111
其次,b^=a:
b 00000100
^
a 00000111
b=00000011
最后,a^=b:
a 00000111
^
b 00000011 -> 3
a=00000100 -> 4