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

对整数使用负数进行左移或右移操作是否属于定义行为?

整数使用负数进行移位操作的行为定义
  • 核心结论:在C++标准中,使用负数作为左移(<<)或右移(>>)操作的右操作数,属于未定义行为。

未定义行为意味着C++标准不对这种情况的结果做任何保证,编译器可自由处理——可能像你代码里那样输出0,可能程序崩溃,可能输出随机值,甚至触发其他异常行为,完全取决于编译器的实现逻辑。

你代码里得到的0只是当前编译器的一种处理方式,换个编译器、版本或者编译选项,结果很可能不一样,绝对不能依赖这个输出。

根据C++标准要求,移位操作的右操作数必须满足两个条件:

  1. 必须是非负整数;
  2. 数值必须小于被移位变量的类型位数(比如int通常是32位,右操作数要在0到31之间)。

你的代码中a << -1和x >> -1都违反了这个规则,所以结果完全不可预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 21:59:49