day07 作业
2019-01-02 本文已影响0人
挽风style
- 使用位运算判断一个数是否是奇数
n = int(input('请输入数字:'))
if n & 1 == 1:
print('这个数是奇数')
else:
print('这个数不是奇数')
- 表达式0x13&0x17的值是(19 )
print(bin(0x13)) # 10011
print(bin(0x17)) # 10111
010011 & 010111 = 19
- 若x=-20,y=3则x&y的结果是(0)
x =110100 , y= 000011
101100(补) & 000011(补) = 000000(补) = 0
- 表达式 -97 | 120 的运算结果是(-1)
-97 = 11100001,120 = 01111000
10011111(补) | 01111000(补) = 11111111(补) = 10000001(原) = -1
-
在位运算中,操作数每右移一位,其结果相当于(B)
A.操作数乘以2
B.操作数除以2
C.操作数除以4
D.操作数乘以4 -
设x是一个整数(16位).若要通过x|y使x低度8位置1,高8位不变,则y的二进制数是( 0000000011111111)
- 总结常用的位运算使用技巧(自己查自己,觉得好用记得住的)
python的位运算符是把数字看作二进制来进行计算的。
位运算符 | 用法 | 举例 |
---|---|---|
& | 按位与:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | 5 & 3 = 1:101 和 011 相同位仅为个位1 ,故结果为 001 |
| | 按位或:只要一个为1,则为1,否则为0 | 101 和 011 出现1的位是 1 1 1,故结果为 111 |
^ | 按位异或:两个二进位相异为为1(即两个二进位要相反),否则为0 | 101 和 011 对位相加(不进位)是 110,故结果为 110(按位反转仅能用在数字前面。所以写成 3+~5 可以得到结果-3,写成3~5就出错了) |
~ | 取反:对数据的每个二进制位取反,即把1变0,把0变1 | 将二进制数+1之后乘以-1,即~x = -(x+1),-(101 + 1) = -110 |
<< | 左移动:运算数的各二进位全部向左移若干位 | 5<<2 = 20 解释:101 向左移动2位得到 10100 ,即右面多出2位用0补 |
>> | 右移动:运算数的各二进位全部向右移若干位 | 5>>2 = 1 解释:101 向右移动2位得到 1,即去掉右面的2位 |