使用位运算符和直接乘除导致的结果差异

P3612 [USACO17JAN] Secret Cow Code S

Trainer_Marvin @ 2023-01-31 03:54:05

如题,按理来说,n >>= 1与n /= 2应该是同样的效果,可下面的代码在不使用位运算符时居然会产生错误的结果,这是为什么?

# P3612
# 分冶
n = input().split()
a, b = n[0], int(n[1])
x = len(a)
while x < b:
    x <<= 1  # 此处如为x *= 2会WA
while b > len(a):
    x >>= 1  # 此处如为x /= 2会WA
    if b == (x+1):
        b = x
    elif b <= x:
        pass
    else:
        b = ((b-1) - x)
print(a[int(b-1)])

by murder_drones @ 2023-01-31 03:58:58

我没有python的软件,你要不在疑问处输出每次位移后的结果试试?


by Hisaishi_Kanade @ 2023-01-31 06:39:53

@Trainer_Marvin python中/是浮点除


by Trainer_Marvin @ 2023-01-31 13:14:59

@bye_wjx 麻烦问一下变为浮点数后会带来什么后果呢?if-eilf结构中的判断条件会受到什么影响?


|