c - 为什么 C 隐式转换像它们那样运行?

标签 c integer implicit-conversion unsigned-integer c89

当整数超出类型的范围时,最大值 + 1 被添加/减去(取决于数字范围的哪一部分)。 例如,

unsigned short num = 65537;

num 的值为 1(减去 65536)。 我的问题是:为什么会这样? 我的直觉告诉我这与进位标志和溢出标志有关,因为最大值始终是 1111....

提前致谢!

最佳答案

对于对有符号整数使用二进制补码的机器,转换为 N 位无符号类型的规则等同于丢弃除低阶 N 之外的所有位。对于典型的硬件,这是进行转换的最简单方法。

标准允许有符号整数的其他表示,但为了一致性使用相同的转换规则。这可能需要在此类机器上做一些额外的工作,但是 (a) 此类机器非常罕见,并且 (b) 无论如何费用应该相当小。

关于c - 为什么 C 隐式转换像它们那样运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11490542/

相关文章:

c - 在C中使用互斥锁同步pthread

c - C 中带乘法的整数溢出

C++ function_pointer 和 &function_pointer 有什么区别?

c - C 中的隐式转换

c# - 具有隐式转换的类型可以与 Entity Framework 映射吗?

c - 这是什么格式?

c++ - 什么更快? (a+a 与 2*a 及更多)

python - 使用 ctypes 通过引用接收传递对象

python - 在特定字符串后获取多个数字

c - 在数组中存储整数(32 位)(哪种类型?)C 编程