没考虑到负数的情况
import sys
n=int(input())
count=0
if n==0:
print(32)
sys.exit()
while n>0:
n_remain=n%2
n//=2
count+=1
if n_remain==0:
print(31-count)
else:
print(32-count)
天呐写了半天又是研究补码反码的才发现,符号位在最高位,所以负数32位存储前导0的个数为零,但也有收获,改进了转换成二进制的代码,c的思维写多了程序真的会忽略python内置函数从而使程序复杂化了啊
知识点:
利用内置bin()函数转换为二进制数,(被转换数不变,本质是生成一个新的)
整数切片返回序列,可以直接遍历,也可转换成list列表后遍历
import sys
n=int(input())
count,flag=0,False
if n==0: #0特殊考虑
print(32)
sys.exit()
if n<0: #负数
print(0)
sys.exit()
n_er=bin(n)
n_er2=n_er[2:] #去除前面的0b
count=0
for i in n_er2:
count+=1
print(32-count)