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
上一篇下一篇

猜你喜欢

热点阅读