如何在C中计算–2147483647–1U(使用二进制补码算术的32位程序)?

问题描述 投票:0回答:1

如果运算是加法,即

x + y = z
,假设
x = -2147483647
(有符号整数)和
y = -1U
,则
-2147483647 + (-1U) = z

什么是

-1U
?签了吗?未签名?

c bit unsigned signed
1个回答
0
投票

-1U 是无符号整数。考虑以下示例:

4U + 8U

将这两个无符号整数相加,您将得到另一个无符号整数,12U。同样:

8U - 2U

将从另一个无符号整数中减去一个无符号整数,得到 6U。因此,

-1U
实际上与
0U - 1U
相同,即数字0减去数字1。由于输出必须是无符号整型,因此没有小于0的值,因此我们将得到整数溢出并得到最大可能的无符号值。也就是说,
-1U = 4294967295

在C中,unsigned int +signed int的返回值是unsigned int。值 -2147483647 转换为 unsigned int 后变为 2147483649。因此,我们有

2147483649 + 4294967295 = 2147483648

© www.soinside.com 2019 - 2024. All rights reserved.