同类数值类型之间的转换

Conversion between numeric types of the same kind

我正在阅读 http://www.cplusplus.com/doc/tutorial/typecasting/。它说:

但是我真的不明白上面那句话是什么意思?有人可以用一个简单的例子来解释吗?为什么同类数字类型之间的转换会产生特定于实现的值?这是什么原因?

让我们考虑以下示例:

    long long int lli = 5000000000;
    long int li;
    int i;
    li = lli;
    i = li;

你能预测 llilii 的值吗?或者 lii 是否具有相同的值?

答案是 - 值取决于为每种类型分配的字节数! IE。对于某些情况 int 等于 long int,对于其他情况 long int 等于 long long int,但通常 long 类型可以更长。 floatdoublelong double.

类似(在内存大小方面)

该代码段分别指的是缩小整数类型和浮点类型之间的转换。也就是说,它声明尽管整数类型之间或浮点类型之间的转换是有效的,但结果值将由实现定义。

例如考虑以下代码:

#include <iostream>
#include <limits>

int main() {
  long long lgm = std::numeric_limits<long long>::max();
  std::cout << std::hex << lgm << std::endl;
  int i = lgm;
  std::cout << std::hex << i << std::endl;

  long double ldb = std::numeric_limits<long double>::max();
  std::cout << std::hex << ldb << std::endl;
  double db = ldb;
  std::cout << std::hex << db << std::endl;
}

输出:

7fffffffffffffff
ffffffff
1.18973e+4932
inf

如您所见,long long 整数的最大值超出了普通整数的容量。但是,您可以将 long long 转换为 int(即转换有效),但由于 int 无法保存 [=12 的最大值=] 无法准确转换。因此,结果 int 的值由实现决定。 long doubledouble之间的转换也是如此。