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

C++右位移(bit-shift right)出现意外结果,求技术解释

右移运算结果不符合预期的原因解析

你的问题核心是对移位运算的操作对象理解错误——移位是针对数值的二进制位进行操作,不是你误以为的十六进制数位。

先一步步拆解计算过程:

  • 变量p = 85,十进制85转二进制为 0b01010101(32位int会在前面补24个0,不影响最终结果),转十六进制是0x55,这部分你是对的。
  • p >> 1是将二进制位整体右移1位:
    原二进制:0b01010101 → 右移1位后得到:0b00101010
    这个值转十进制是42,十六进制就是0x2a,和你看到的输出一致。
  • p >> 2是将二进制位整体右移2位:
    原二进制:0b01010101 → 右移2位后得到:0b00010101
    这个值转十进制是21,十六进制就是0x15,也和输出匹配。

你之前预期的0x5和0x0,是错误地把十六进制数0x55当成两个独立的十六进制数位(5和5)来移位,这完全不符合C++中移位运算的规则。移位运算始终基于数值的二进制表示操作,和你用什么进制输出无关。

内容的提问来源于stack exchange,提问作者user3600124

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 20:22:39