将负数的整数左移或右移,是定义的行为吗?

问题描述 投票:0回答:1

我尝试了下面的代码,在这两种情况下,即(左移和右移)我得到的输出为 0

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int a=20;

    a=a<<-1;
    cout<<a;
    int x=20;
    x=x>>-1;
    cout<<x;
    return 0;
}
c++ bit-shift
1个回答
0
投票

移动负值会触发代码中的未定义行为。这是在 C++ 标准第 8.8p1 节中指定的:

如果右操作数为负或更大,则行为未定义 大于或等于提升的左操作数的位长度

© www.soinside.com 2019 - 2024. All rights reserved.