美文网首页
Day7 课后作业

Day7 课后作业

作者: LitoYu | 来源:发表于2019-01-02 19:54 被阅读0次
1.使用位运算判断一个数是否是奇数
num = int(input('请输入一个数:'))
if num & 1 == 1:
    print('%d是奇数' % num)
else :
    print('%d不是奇数' % num)
2.表达式0x13&0x17的值是( 19)

print(bin(0x13)) = 0b10011 ->010011(原码) -> 010011(反码) -> 010011(补码)
print(bin(0x17)) = 0b10111 ->010111 ->010111 -> 010111(反码) -> 010111(补码)
0x13 & 0x17 ==> 010011 & 010111 ==> 010011
010011(补码) -> 010011(反码) -> 010011(原码) -> 0b10011 -> 19

print(0x13 & 0x17) # 19

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

x = -20 = -0b10100 = 110100(原码) = 101011(反码)= 101100(补码)
y = 3 = 0b00011 = 000011(原码) = 000011(反码) = 000011(补码)
x & y ==> 101100 & 000011 ==> 000000 ==> 0

print(-20 & 3) # 0

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

-97 = -0b1100001 = 11100001(原码) = 10011110(反码) = 10011111(补码)
120 = 0b1111000 = 01111000(原码)= 01111000(反码) = 01111000(补码)
-97 | 120 ==> 10011111 | 01111000 ==> 11111111(补码) ==> 11111110(反码) ==> 10000001(原码) ==> -0b1 = -1

print(-97 | 120)# -1

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

print(4 >> 1)# 2 4 >> 1 = 4 // 2 = 2
A.操作数乘以2 B.操作数除以2
C.操作数除以4 D.操作数乘以4

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

00000000 11111111

7.一些常见的二进制位的变换操作:

注: shr--右移;shl--左移;xor--异或;or--或运算;and--与运算

序号 功能 示例 位运算
1 去掉最后一位 (101101->10110) x shr 1
2 在最后加一个0 (101101->1011010) x shl 1
3 在最后加一个1 (101101->1011011) x shl 1+1
4 把最后一位变成1 (101100->101101) x or 1
5 把最后一位变成0 (101101->101100) x or 1-1
6 最后一位取反 (101101->101100) x xor 1
7 把右数第k位变成1 (101001->101101,k=3) x or (1 shl (k-1))
8 把右数第k位变成0 (101101->101001,k=3) x and not (1 shl (k-1))
9 右数第k位取反 (101001->101101,k=3) x xor (1 shl (k-1))
10 取末三位 (1101101->101) x and 7
11 取末k位 (1101101->1101,k=5) x and (1 shl k-1)
12 取右数第k位 (1101101->1,k=4) x shr (k-1) and 1
13 把末k位变成1 (101001->101111,k=4) x or (1 shl k-1)
14 末k位取反 (101001->100110,k=4) x xor (1 shl k-1)
15 把右边连续的1变成0 (100101111->100100000) x and (x+1)
16 把右起第一个0变成1 (100101111->100111111) x or (x+1)
17 把右边连续的0变成1 (11011000->11011111) x or (x-1)
18 取右边连续的1 (100101111->1111) (x xor (x+1)) shr 1
19 去掉右起第一个1的左边 (100101000->1000) x and (x xor (x-1))
20 后四位取反 100101010->100100101 x xor 00001111
21 交换两个数 1010,1111(a)->1111,1010(b) a=a xor b;b=b xor a;a=a xor b

示例:

1.去掉最后一位
print(bin(123))#0b1111011
print(bin(0b1111011 >> 1))#0b111101
2.在最后加一个0
print(bin(123))#0b1111011
print(bin(0b1111011 << 1))#0b11110110

相关文章

网友评论

      本文标题:Day7 课后作业

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