c++ - 转换回早期类型

标签 c++ c

<分区>

我在一些代码中看到我们有一个带符号的值被传递给函数(它采用无符号值)。返回的值再次转换回带符号的值(目的是获得原始带符号的值)。即使它当前有效。我怀疑,在这种情况下,在所有可能的情况下,原始带符号的值是否会保留?

有人告诉我转换不好,应该尽可能避免。一些计算机科学专家可以让我知道什么时候可以破解这段代码吗?

最佳答案

我知道的所有实现(在不同平台上使用 C++ 20 多年之后),通过什么都不做来转换有符号 <-> 无符号整数,即二进制值不变地传递。

这种行为的根源在于处理(即不处理)C 中的整数溢出。有这样的遗留问题,这种有符号/无符号转换是一件合理的事情。我认为这永远不会改变。

总而言之,有符号 -> 无符号 -> 有符号和无符号 -> 有符号 -> 无符号的转换是 100% 安全的。当您有偶数次转换时,您要么需要注意数字的值是一个不使用最高位的非负整数,在这种情况下,类型是有符号还是无符号并不重要。否则,您应该使用自己的代码明确处理超出范围的值。

关于c++ - 转换回早期类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18772644/

相关文章:

c++ - 帮助 WinAPI 滚动条

c - 了解 putchar 循环

c - 如何使用指针表示法访问动态结构

c - 如何正确打印来自 clGetDeviceInfo 的值

c++ - 使用 shmat 和 shmget 与 forks 相乘矩阵

c++ - 猜猜输出。 (字符数组的声明/初始化)

python - Pybind11 : "ImportError: DLL not found" when trying to import *. Python解释器中的pyd

c++ - Portaudio 不会使用 macports GCC 4.8 进行编译(-arch 命令选项无法识别/错误的寄存器名称错误)