day7作业

2019-01-02  本文已影响0人  星龙断月

1.使用位运算判断一个数是否是奇数

num1 = input('请输入一个数:')
if int(num1) & 1 == 0:
    print('%s不是奇数' % num1)
elif int(num1) & 1 == 1:
    print('%s是奇数' % num1)

2.表达式0x13&0x17的值是( 19)

# 0x是十六进制
# 0x13 = 3* 16**0+1*16**1=3+16=19=010011(补)
# 0x17 = 7* 16**0+1*16**1=7+16=23=010111(补)
0x13 & 0x17=010011 & 010111 =010011=19

3.若x=-20,y=3则x&y的结果是( 0)

x=-20  原码:110100 反码:101011  补码:101100
y=3     原码:000011 补码000011
x&y = 101100 & 000011 = 000000(补)=000000(原)=0

4.表达式 -97 | 120 的运算结果是(-1)

-97:    原码:11100001 反码:10011110 补码:10011111
120    原码:01111000 补码:01111000
-97|120=10011111 | 01111000 = 11111111(补码)
补码:11111111 反码:11111110 原码:10000001 =-1

5.在位运算中,操作数每右移一位,其结果相当于( B)

A.操作数乘以2 B.操作数除以2

C.操作数除以4 D.操作数乘以4

6.设x 是一个整数(16位).若要通过x|y使x低8位置1,高8位不变,则y的二进制数是( )

因为1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
所以低8位置1所以y的低8位是11111111高8位不变,高8位是00000000
所以y的二进制数是0b00000000 11111111


7.总结常用的位运算使用技巧(自己查自己,觉得好用记得住的)

补码公式 作用
-x ~x + 1 ( ~(x-1))
~x -x-1
-(~x) x+1
~(-x) x-1
(x - ~y - 1) , (x|y)+(x&y) x+y
(x + ~y + 1) , (x|y)-(x&y) x-y
(x|y)-(x&y) x^y
(x&~y)+y x|y
(~x|y)-~x x&y
~(x-y|y-x) x==y
x-y|y-x x!=y
(x-y)^((x^y)&((x-y)^x)) x< y
(x|~y)&((x^y)|~(y-x)) x<=y
(~x&y)|((~x|y)&(x-y))//无符号x,y比较 x< y
(~x|y)&((x^y)|~(y-x))//无符号x,y比较 x<=y
上一篇下一篇

猜你喜欢

热点阅读