如何在 c++ 中对整数值进行位移
How to bitshift integer value in c++
我知道这是一个常见问题,我不知道为什么我会遇到这么多麻烦。 我正在尝试将一行从 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
....
相关文章:
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 如何只允许用户输入正整数
- 如何在c++中从文本文件中逐行读取整数
- C++:如何循环通过向量中的整数元素
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 序列化,没有库的整数,得到奇怪的结果
- 在一定长度后从数组中打印时缺少整数
- std::当在256字节边界上写入整数时,流的奇怪行为
- 内联程序集printf将整数解释为地址
- 是否基于数组B整数打印数组A中的整数
- 如何在C++中将整数转换为其数字数组