题目1:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。

如:9的二进制表示为1001,有2位是1
解题思路:
方法一:判断一个二进制的某一位(第n位)是否是1,可以让这位与1进行按位与运算,如果是1,则结果为2^n

  1. def num_1():
  2. num=input("请输入\n")
  3. #input返回的是字符串,需要转换成整型才能进行按位与运算
  4. # print(int(num)&(1<<0))
  5. count=0
  6. for i in range(32):
  7. if (int(num)&(1<<i))==(1<<i):
  8. count=count+1
  9. i=i+1
  10. print("1的个数为%d" %count)
  11. num_1()

方法二:一个二进制数与该二进制数减1的数进行按位与运算,结果就是把该二进制数最末尾的1换成0,依次循环操作,一次操作就消掉一个1,每次操作都将计数器加一可以得出这个二进制中1的个数

  1. def num_1():
  2. num = int(input("请输入\n"))
  3. t = 0
  4. while num != 0:
  5. num = num & (num-1)
  6. t = t+1
  7. print("1的个数为%d" % t)
  8. num_1()

题目2:用一条语句判断一个整数是不是2的整数次方

  1. if (num & (num-1))==0:
  2. print("该数是2的整数次方")

题目3:将整数的奇偶位互换

例如:9的奇偶位互换了之后是6

  1. def odd_even():
  2. num=int(input("请输入你要转换的整数\n"))
  3. ou=num&0xaaaaaaaa #与1010 1010 1010 ...进行按位与运算
  4. ji=num&0x55555555 #与0101 0101 0101 ...进行按位与运算
  5. return (ou>>1)^(ji<<1)
  6. chang=odd_even()
  7. print("转换后的数是%d" %chang)

题目4:0~1间浮点实数的二进制表示

image.png

“乘二挪整”

  1. import math
  2. def turn():
  3. s=["0."]
  4. num=0.625
  5. while num>0:
  6. num=num*2
  7. if num>=1:
  8. s.append("1")
  9. num=num-1
  10. else:
  11. s.append("0")
  12. x=s[0]
  13. for i in range(len(s)-1):
  14. x=x+s[i+1]
  15. print(x)
  16. turn()

python中的浮点运算注意点:

https://blog.csdn.net/xiaozhimonica/article/details/82785625

题目5:K个K进制的数做不进位的加法运算结果为0

image.png