美文网首页
day07-作业

day07-作业

作者: 馒头不要面 | 来源:发表于2019-01-02 20:35 被阅读0次

    1.使用位运算判断一个数是否是奇数

    n = int(input("请输入一个整数:"))
    
    if n & 1 == 1:
        print(n,"为奇数")
    else:
        print(n,"为偶数")
    
    

    2.表达式0x13 & 0x17的值是( )

    # 先把十六进制转换为二进制
    0x13 = 000010011(原) = 000010011(反) = 000010011(补)
    0x17 = 000010111(原) = 000010111(反) = 000010111(补)
    0x13 & 0x17 = 000010011 & 000010111 = 000010011 = 19
    
    

    3.若x=-20,y=3则x&y的结果是( )

    # 先把x,y用二进制表示
    x = -20 = 110100(原) = 101011(反) = 101100(补)
    y = 3   = 000011(原) = 000011(反) = 000011(补) 
    x & y = 101100 & 000011 = 000000(补) = 000000(反) = 000000(原) = 0
    

    4.表达式 -97 | 120 的运算结果是()

    # 先把-97和120用二进制表示
    -97 = 11100001(原) = 10011110(反) = 10011111(补)
    120 = 01111000(原) = 01111000(反) = 01111000(补)
    -97 | 120 = 10011111 | 01111000 = 11111111(补) = 11111110(反) = 10000001 = -1
    

    5.在位运算中,操作数每右移一位,其结果相当于( B )

    按位运算中,操作数每右移一位,相当于原数整除2
    

    A.操作数乘以2 B.操作数除以2
    C.操作数除以4 D.操作数乘以4

    6.设x 是一个整数(16位).若要通过x|y使x低8位置1,高8位不变,则y的二进制数是( )

    因为正数的原码、反码、补码三码合一,
    因为1 | 0 = 1, 1 | 1 = 1,所以低8位置1,则低8位全为1,
    因为0 | 0 = 0, 1 | 0 = 1,所以高8位不变,则高8为全为0,
    所以y的二进制数为:00000000 11111111
    
    

    7.总结常用的位运算使用技巧(自己查自己,觉得好用记得住的)

    技巧一:用&来关闭某位的值

    例如:我们想要关闭a数中的第4位,而又不影响其它位的现状,可以用一个数0xF7,即二进制数11110111去与a数作按位“与”运算
    0x88  10001000  a数
    &
    0xF7  11110111  屏蔽数
         =10000000
    

    技巧二:用|来开启某位的值

    例如:我们想要开启a数中的第4位,而又不影响其它位的现状,可以用一个数0xF7,即二进制数00001000去与a数作按位“或”运算
    0x80  10000000  a数
    &
    0xF7  00001000  开启数
         =10001000  
    

    技巧三:用^直接交换两个变量的值

    如,若有变量a=3,b=4,想要交换它们的值,可以做如下一组操作:
    a^=b
    b^=a
    a^=b
    
    首先,a^=b:
    a 00000011
    ^
    b 00000100
      
    a=00000111
    其次,b^=a:
    b 00000100
    ^
    a 00000111  
    
    b=00000011
    最后,a^=b:
    a 00000111
    ^
    b 00000011  -> 3
    a=00000100  -> 4
    

    相关文章

      网友评论

          本文标题:day07-作业

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