美文网首页
2019-01-02 day7作业

2019-01-02 day7作业

作者: woming | 来源:发表于2019-01-02 20:28 被阅读0次

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.总结常用的位运算使用技巧(自己查自己,觉得好用记得住的)

  1. 用按位与运算判断一个数n的奇偶性
    n & 1 == 0, n为偶数
    n & 1 == 1, n为奇数

  2. 左移、右移
    数字是二进制数(原理):
    数字1 << N:在数字1补码右边添加N位0
    数字1 >> N:去掉数字1补码右边N位

数字是十进制数:
数字1 << N : 数字1左移N位,数字1 * 2N,
数字1 >> N : 数字1右移N位,数字1 // 2
N
应用:快速乘以2的N次方 / 除2的N次方

  1. 按位异或,只能判断两个数是否相等
    n1 ^ n2 == 0 --> n1 == n2
    n1 ^ n2 != 0 --> n1 != n2

  2. 异或运算交换两个数(不借助第三变量)
    a = a ^ b
    b = b ^ a
    a = a ^ b

  3. 判断一个数是否是2的n次方
    a & a-1 == 0 --> a是2的n次方

  4. 统计一个整数x二进制中1的个数
    循环 x & x-1 ,直到 x & x-1 == 0, 统计循环的次数就是二进制中1的个数

相关文章

网友评论

      本文标题:2019-01-02 day7作业

      本文链接:https://www.haomeiwen.com/subject/okytrqtx.html