gpt4 book ai didi

c - 是否在 C 中将符号转换为无符号转换会更改位值

转载 作者:太空狗 更新时间:2023-10-29 14:49:12 25 4
gpt4 key购买 nike

我做了一些快速测试,证明在 C 中将 signed int 转换为 unsigned int 不会更改位值(在在线调试器上)。

我想知道它是否由 C 标准保证或只是常见(但不是 100% 确定)的行为?

最佳答案

signed intunsigned int 的转换不会改变位表示in two’s-complement C implementations ,这是最常见的,但会更改负数的位表示,包括一个补数符号和大小系统上可能的负零。

这是因为转换 (unsigned int) a 定义为保留位,但结果是除法的正余数 a UINT_MAX + 1(或作为 C 标准(C11 6.3.1.3p2) 表示,

the value is converted by repeatedly adding or subtracting one more than the maximum value that can be represented in the new type until the value is in the range of the new type.

负数的二进制补码表示是最常用的有符号数表示正是因为它具有负值n映射到相同位模式的属性数学值 n + UINT_MAX + 1 – 它使得使用相同的机器指令进行有符号和无符号加法成为可能,并且由于回绕,负数将起作用。

关于c - 是否在 C 中将符号转换为无符号转换会更改位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com