美文网首页
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