C++:将无符号长整型长整型转换为无符号长整型
C++: convert unsigned long long to unsigned long
我正在尝试将无符号长长转换为无符号长。以下方法是否正确?
unsigned long removeExtraBits2(unsigned long long c) {
return (unsigned long) ((c << 32) >> 32);
}
如果没有,你能提供一个工作的例子吗?
我的假设是,当向左移动然后向右移动时,最左边的 32 位设置为 0。
谢谢!
编辑:转换的目的是摆脱多余的位,"高于"32位,有效地只将最右边的32位保留到无符号的长整型中。
只需执行"普通"强制转换((unsigned long)c
,或者,如果您喜欢冗长,static_cast<unsigned long>(c)
,甚至只是将unsigned long long
源值分配给unsigned long
目标变量),标准保证左侧的额外位将被截断。
如果目标类型是无符号的,则结果值是与源整数全等的最小无符号整数(模 2n,其中 n 是用于表示无符号类型的位数)。
(C++11, §4.7 ¶2)
如果源是无符号的(或者有符号并且在 2 的补码算术中),这是一种说额外位被截断的奇特方式。
有许多不同的处理器和操作系统。unsigned long long
几乎在所有内容上都是 64 位。unsigned long
是另一回事。例如,Linux x86-64 上的 64 位,Linux x86-32 上的 32 位和 Windows x86-64 和 x86-32 上的 32 位。普通转换可能是无用的。
我认为这是一个安全的解决方案。
unsigned long removeExtraBits(unsigned long long c) {
c %= 0x100000000ULL;
return (unsigned long)(c);
}
编译器将%
更改为简单mov
。
相关文章:
- 无法在 Arduino 中uint8_t数组转换为无符号长整型数组
- 提升不良词法强制转换:将字符串转换为无符号长整型时,无法将源类型值解释为目标
- 将最小值整数转换为无符号长整型
- 如何将小端格式的QByteArray转换为无符号长整型
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 如何以优雅高效的方式将无符号/有符号整数/长整型转换为 C 字符串?
- 将 BYTE 数组转换为无符号长整型
- 整数溢出 C++ 即使使用“无符号长整型”也是如此
- gdb ptype 打印整数后缀以指示它是有符号的、无符号的、无符号的长整型等
- 模板参数可以既是 int 又可以是无符号长整型吗?
- 用有符号长整型结果减去无符号长整型
- iOS - 隐式转换将整数精度"size_t"(也称为"无符号长整型")丢失为&
- 将字符串存储在无符号长整型的向量中
- 如果我尝试在 c++ 中将大于 pow(2,64)-1 的值分配给无符号长整型怎么办?
- C++:将无符号长整型长整型转换为无符号长整型
- 在 CORBA 客户端/服务器应用程序中将无符号的长整型(从 C++)断言为长整型 (Java)
- 无法将DWORD转换为无符号长整型
- 无符号长整型VS无符号长型整型
- 如何将SHA1转换为无符号长整型数组[5]
- 如何将 3 个整数连接成无符号长整型