You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

位右移运算结果不符合预期问题求助

位右移运算结果不符合预期问题求助

看起来你遇到的问题是位右移后的结果和预期不符,我们一步步拆解你的代码,就能找到问题所在啦~

先梳理你的代码执行完整流程:

  • 初始阶段,你定义了变量:s = 154,p = 6
  • 接着执行了位或操作 s = s | p,我们来算一下这个操作的具体结果:
    • 154的二进制是 10011010,6的二进制是 00000110
    • 位或运算的规则是对应位只要有一个1就设为1,所以运算后的二进制结果是 10011110,转换成十进制就是158
  • 之后你对这个已经被更新为158的s执行右移2位操作:sbutshift2digit = s >> 2
    • 整数右移2位等价于对该数做整数除法除以4,158 ÷ 4 = 39.5,而Python的整数右移会直接舍弃小数部分,所以结果就是39,这和你代码输出的结果完全一致

那你预期的38是怎么来的呢?应该是你误以为右移操作是针对初始的s=154来计算的对吧?如果用初始值154执行右移2位:154 >> 2,154 ÷4=38.5,舍弃小数后确实是38,但你的代码里在右移之前已经把s的值改成了位或后的158,所以结果自然和预期产生了偏差。

如果你的需求是对初始的s值执行右移操作,只需要在修改s之前先保存初始值即可,比如调整代码如下:

# 初始定义变量
s = 154
p = 6

# 保存初始的s值
original_s = s

# 执行位或操作更新s
s = s | p

# 对初始s执行右移2位操作
s_original_shift = original_s >> 2
p_shift = p >> 2

print("初始s右移2位的十进制值:", s_original_shift)  # 输出38
print("初始s右移2位的二进制值:", bin(s_original_shift)[2:])  # 输出100110

print("\n")

print("p右移2位的十进制值:", p_shift)  # 输出1
print("p右移2位的二进制值:", bin(p_shift)[2:])  # 输出1

总结一下:问题的核心是你在执行右移操作前已经修改了s的取值,用的是位或运算后的158而非初始的154,这才导致结果和你的预期不符~

备注:内容来源于stack exchange,提问作者Prearea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 12:58:16