位操作和> 32位数?

时间:2014-01-18 18:21:25

标签: c++

我基本上是在尝试做以下事情:

c[i] = ((number_to_store << pos) & 0xFF00000000) >> 32;

但是这会将0存储在c[i]不期望的内容中。以下工作就像一个魅力:

c[i] = ((number_to_store << pos) & 0xFF000000) >> 24;

我99%肯定错误与我的所有变量unsigned int有关,但在这里我要求40位空间。

有人可以解释 小于或等于32位超过32位数字之间的差异,当它是关于位操作时?

编辑:这也给了我0:

cout << ((((unsigned long)number_to_store << (unsigned long)pos) & (unsigned long)0xFF00000000) >> 32) << endl;

编辑2 :以下作品:

cout << ((((unsigned long long)number_to_store << (unsigned long long)pos) & (unsigned long long)0xFF00000000) >> 32) << endl;

获得的经验教训:永远不要期望长于大于

1 个答案:

答案 0 :(得分:1)

unsigned int是32位,如果你将它移位32位,它将变为0.正如你所知,为了保留第一班中向左移位的位,你必须声明number_to_store as unsigned long long,即64位。

相关问题