gpt4 book ai didi

无符号和有符号整数的 C++ 算术类型转换

转载 作者:行者123 更新时间:2023-11-27 22:46:09 27 4
gpt4 key购买 nike

代码:

#include<iostream>
using std::cout; using std::endl;

int main()
{
unsigned int i = 5;
int x = -3;

cout << "(i + x) = " << (i + x) << endl;

cout << "Set x to -6" << endl;
x = -6;

cout << "(i + x) = " << (i + x) << endl;
}

输出:

(i + x) = 2
Set x to -6
(i + x) = 4294967295

在这个例子中,(i + x) 返回的结果类型是一个无符号整数,但是,我认为通过算术类型转换,有符号整数(在这种情况下为变量“x”)应该是在操作发生之前“提升”为无符号整数。这一定不是这种情况,因为 (i + x) 的第一个结果将是 (5 + (2^31 - 1 - 3)) = 4294967297 而不是 2。我在这里遗漏了什么吗?在我看来,只有最终结果被转换为无符号整数,而不是初始操作数。

最佳答案

您的错误是假设计算是 (5 + (2^31 - 1 - 3))-3unsigned 解释基于最大值2^32 - 1 (UINT_MAX),不是 2^31 - 1 (INT_MAX)。所以你取 2^32 - 1 - 3 (UINT_MAX - 3),加上 5,因为它超过了 UINT_MAX,它换行回到 2,至少在你的 32 位 int 二进制补码系统上是这样。

关于无符号和有符号整数的 C++ 算术类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42661691/

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