1.使用位运算判断一个数是否是奇数
num = int(input('输入数:'))
if num & 1 == 1:
print('%d是奇数' %num)
else:
print('%d不是奇数' %num)
2.表达式0x13 & 0x17的值是( )
# 0x13 = 000010011(原码)
# 0x17 = 000010111(原码)
print(0x13 & 0x17) # 19
3.若x = -20, y = 3则x & y的结果是( )
# x = -20 = 110100(原码) = 101011(反码) = 101100(补码)
# y = 3 = 000011(原码) = 000011(反码) = 000011(补码)
# x & y = 101100 & 000011 = 000000(补码) = 000000(反码) = 000000(原码) = 0
print(-20 & 3)
4.表达式 - 97 | 120的运算结果是()
# -97 = 11100001(原码) = 10011110(反码) = 10011111(补码)
# 120 = 01111000(原码) = 01111000(补码)
# -97 | 120 = 10011111 | 01111000 = 11111111(补码) = 11111110(反码) = 10000001(补码) = -1
print(-97 | 120)
5.在位运算中,操作数每右移一位,其结果相当于(B)
A.操作数乘以2
B.操作数除以2
C.操作数除以4
D.操作数乘以4
6.设x是一个整数(16位).若要通过x | y使x低度8位置1,高8位不变,则y的二进制数是( )
y = 0000000011111111
7.总结常用的位运算使用技巧(自己查自己,觉得好用记得住的)
-
用按位与运算判断一个数n的奇偶性
n & 1 == 0, n为偶数
n & 1 == 1, n为奇数 -
左移、右移
数字是二进制数(原理):
数字1 << N:在数字1补码右边添加N位0
数字1 >> N:去掉数字1补码右边N位
数字是十进制数:
数字1 << N : 数字1左移N位,数字1 * 2N,
数字1 >> N : 数字1右移N位,数字1 // 2N
应用:快速乘以2的N次方 / 除2的N次方
-
按位异或,只能判断两个数是否相等
n1 ^ n2 == 0 --> n1 == n2
n1 ^ n2 != 0 --> n1 != n2 -
异或运算交换两个数(不借助第三变量)
a = a ^ b
b = b ^ a
a = a ^ b -
判断一个数是否是2的n次方
a & a-1 == 0 --> a是2的n次方 -
统计一个整数x二进制中1的个数
循环 x & x-1 ,直到 x & x-1 == 0, 统计循环的次数就是二进制中1的个数
网友评论