如何在 c++ 中对整数值进行位移

How to bitshift integer value in c++

本文关键字:整数 c++      更新时间:2023-10-16

我知道这是一个常见问题,我不知道为什么我会遇到这么多麻烦。 我正在尝试将一行从 IDL 代码转换为 c++

IDL:

for i = 0,7 do begin
    b = ishfy(b,1)
    print,b
endfor

我的C++代码:

    for(int i = 0; i < 7; i++)
    {
        b = b << 1;
        cout << b;
    }

我最初的 b 是 255,我希望收到 254、252 等。 相反,我的第一个位移返回 510。 我假设我的问题不是在移位之前将 b 转换为二进制形式。 这是对的吗?如果是这样,我该如何解决它?

提前感谢!

<<向

左移动。如果 B 最初是 255(二进制11111111),你把它向左移动一个,你会得到111111110(在大多数机器上,int 是 32 位宽,所以有空间容纳那个 0),十进制为 510。

因此,该程序100%正常工作。

如果您希望它"砍掉"更高的位,则使b成为8位宽类型,例如char,或带有0xFF的AND。

似乎您想清除最低有效位。左移运算符<<不这样做。

在这种情况下,您可以执行以下操作:

for(int i = 0; i < 7; i++)
{
    b &= (b - 1);
    cout << b;
}

所以你有:

1st it: 11111111 & 11111110 = 11111110 = 254
2nd it: 11111110 & 11111101 = 11111100 = 252
3rd it: 11111100 & 11111011 = 11111000 = 248
4th it: 11111000 & 11110111 = 11110000 = 240

....