位操作和> 32 位数字?
Bit manipulation and > 32 bit numbers?
我基本上正在尝试以下操作:
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;
经验教训:永远不要期望long大于int
无符号int是32位,如果将其移位32位,它将变为0。正如您所发现的,为了保留在第一次移位中向左移位的位,您必须将number_to_store
声明为unsigned long long
,即64位。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 打印数字图案
- C++问题:用户认为数字1-100,程序提出问题不超过6次即可得到答案。无法正确
- 如何检查一个c++字符串中有多少相同的字符/数字
- 求出有多少个数字是完美平方,而sqrt()是L,R范围内的素数
- EASTL矢量<向量<int>>连续的
- 将数字打印成文字
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据