gpt4 book ai didi

c - Tilde C 无符号整数与有符号整数

转载 作者:行者123 更新时间:2023-12-04 11:16:22 26 4
gpt4 key购买 nike

例如:

unsigned int i = ~0;

结果:我可以分配给i

的最大数量

signed int y = ~0;

结果:-1

为什么我得到 -1?我不应该得到可以分配给 y 的最大数量吗?

最佳答案

4294967295(又名 UINT_MAX)和 -1 具有相同的二进制表示 0xFFFFFFFF 或 32 位全部设置为 1。这是因为带符号的数字使用 two's complement 表示.负数的 MSB(最高有效位)设置为 1,其值通过翻转其余位、添加 1 并乘以 -1 来确定。因此,如果您将 MSB 设置为 1 并且其余位也设置为 1,则翻转它们(获得 32 个零),添加 1(得到1)并乘以-1,最终得到-1

这使得 CPU 更容易进行数学运算,因为它不需要负数的特殊异常(exception)。例如,尝试添加 0xFFFFFFFF (-1) 和 1。由于只有 32 位的空间,这将溢出并且结果将如预期的那样为 0

查看更多:

http://en.wikipedia.org/wiki/Two%27s_complement

关于c - Tilde C 无符号整数与有符号整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13147790/

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