【问题标题】:Can you add different number types together in c++? [closed]你可以在 C++ 中添加不同的数字类型吗? [关闭]
【发布时间】:2018-10-03 08:59:39
【问题描述】:

我对 c++ 很陌生,我想知道你是否可以将不同的数字类型添加在一起,像这样:

int num1=1;
float num2=1.0;
double num3=1.0;

你能把这些变量加在一起吗?如果可以的话,应该是什么类型

num1+num2+num3

是吗?

【问题讨论】:

  • 你为什么不试试呢?
  • 恭喜您开始了掌握 C++ 的旅程!请记住,StackOverflow 不能替代结构良好的 C++ book
  • 10 票反对有点苛刻。甚至 Stroustrup 也说“基本类型可以通过多种方式隐式转换”(TC++PL 4e)

标签: c++


【解决方案1】:

如前所述,答案将是double

编译器会为此做的(没有优化)是

  1. 将文字 1 读入 num1
  2. 将文字 1.0f 读入 num2
  3. 读取文字 1.0 info num3
  4. 将整数 num1 转换为浮点数 num1'
  5. num1'和num2相加,结果为float tmp
  6. 将 float tmp 转换为 double tmp'
  7. 添加 tmp' 和 num3 得到最终的 double 结果

您需要小心处理这些转换。虽然您可以将float(和int)转换为double,而不会损失任何精度,但您不能总是将int 转换为float

float 有 24 位的精度,这意味着它可以精确地表示最多约 1680 万的所有整数,而 signed int 可以达到约 20 亿。详情请见here

[我假设LP64 model]

【讨论】:

  • 当心,int 并非总是可以转换为 double 而不会损失精度。例如,sizeof(int) == sizeof(double) 的架构就是这种情况。
  • 我怀疑 OP 使用的是旧 Cray 机器之类的东西。
  • 你错了,一些新的 Arch 具有 int 与指针大小相同的特性。
  • 指针大小与什么有什么关系?目前,除了 LP64、LLP64 和 ILP32 之外的任何东西都非常奇特。也许一些新的 RISC-V 系统将是 IPL64?
  • 在我家的电脑上,intel i7 + Linux x64,sizeof(int) == sizeof(void*) == sizeof(double)
【解决方案2】:

答案是双重的。如果你想测试它,你可以试试auto ret = num1+num2+num3 ans 看到 ret 的类型。

【讨论】:

  • 我猜 OP 可能不知道如何检查 ret 的类型。
【解决方案3】:

是的,当然...结果会给出一个浮点数 1+1.0+1.0=3.0 由于双

【讨论】:

  • 你的回答有点混乱,可能不正确,结果会是双倍
猜你喜欢
  • 2023-04-04
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
相关资源
最近更新 更多