【发布时间】:2013-10-15 22:57:57
【问题描述】:
我知道这是一个常见问题,但我无法弄清楚为什么我遇到了这么多麻烦。我正在尝试将一行从 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 转换为二进制形式。它是否正确?如果是这样,我该如何解决?
提前致谢!
【问题讨论】:
-
你看到的是预期的:你有
0b11111111,当它移动一个时是0b111111110,即510。 -
255 是 1111_1111 基数 2。当您使用
<< 1时,您会将所有位向左移动。因此,这与乘以 2 具有相同的行为:1_1111_1110 base 2 是 510 base 10。 -
我想你可能想要
(b << 1) & 0xff -
ishfy是做什么的?搜索中唯一出现的就是这个问题。看起来你想要b = (b >> i) << i。 -
按照他说的模式,他似乎想要这个:stackoverflow.com/a/19257710/321337
标签: c++ idl-programming-language