我基本上是在尝试做以下事情:
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;
获得的经验教训:永远不要期望长于大于
答案 0 :(得分:1)
unsigned int是32位,如果你将它移位32位,它将变为0.正如你所知,为了保留第一班中向左移位的位,你必须声明number_to_store
as unsigned long long
,即64位。