作业
# 1 num1 = int(input('请输入一个整数:')) if num1 & 1: print(num1,'是奇数') else: print(num1,'是偶数')
2 表达式0x13&0x17的值是(19 ) 0x13 = 19 = 0b10011 0x17 = 23 = 0b10111 0b10011 & 0b10111 = 0x10011 = 19
# 3 若x=-20,y=3则x&y的结果是(0 ) -20 = 0b110100(原) = 0b101011(反) = 0b101100(补) 3 = 0b000011(补码) x & y = 0b101100 & 0b000011 = 0b000000(补) = 0 print(-20 & 3)
4 表达式 -97 | 120 的运算结果是(-1) -97 = 0b11100001(原) = 0b10011111(补) 120 = 0b01111000(补) 0b10011111 | 0b01111000 = 0b1111111(补) = 0b1000001 print(-97 | 120)
-
在位运算中,操作数每右移一位,其结果相当于(B )
A.操作数乘以2
B.操作数除以2
C.操作数除以4
D.操作数乘以4
6.设x 是一个整数(16位).若要通过x|y使x低度8位置1,高8位不变,则y的二进制数是(00001111 )
或运算 高八位不变则y的高八位的每一位分别是0000低八位为1111则y=00001111
位运算技巧总结
-
不使用 + 完成加法
def add(num1,num2): sum = 0 carry = 0 # 循环 结果相加直到进位为0 while num2 != 0: # 将两个数异或,模拟加法中相加不进位 sum = num1 ^ num2 # 只考虑进位 carry = (num1 & num2) << 1 num1 = sum num2 = carry return sum print(add(1,3))
-
交换两数的值
a = 12 b = 13 a = a ^ b b = b ^ a a = a ^ b print(a,b)
-
取绝对值
n = -25 n = (n ^ (n >> 31)) - (n >> 31) print(n)
-
取最大值
a = 25 b = 96 n = b &((a -b) >> 31) | a & (~(a - b) >> 31) print(n)
-
取最小值
a = 25 b = 96 n = a &((a -b) >> 31) | b & (~(a - b) >> 31) print(n)
-
从低位到高位 取n的第m位
n = 0b111000 m = 1 print(n) bit1 = n >> (m - 1) & 1 print(bit1)
-
从低位到高位 将n的第m位置1
n = n | (1 << (m - 1)) print(bin(n))
-
从低位到高位 将n的第m位置0
n = n & ~(1 << (m - 1)) print(bin(n))
网友评论