如果运算是加法,即
x + y = z
,假设x = -2147483647
(有符号整数)和y = -1U
,则-2147483647 + (-1U) = z
什么是
-1U
?签了吗?未签名?
-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
。