同类数字类型之间的转换

Conversion between numeric types of the same kind

本文关键字:转换 之间 类型 数字 同类      更新时间:2023-10-16

我正在阅读http://www.cplusplus.com/doc/tutorial/typecasting/.上面写着:

  • 否则,如果转换在相同类型的数字类型之间(整数到整数或浮点到浮点),转换有效,但是该值是特定于实现的(并且可能不是可移植的)。

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

让我们考虑以下示例:

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

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

答案是-值取决于为每种类型分配的字节数!也就是说,在某些情况下,int等于long int,而在其他情况下long int等于long long int,但通常long er类型会更长。与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无法保持long long的最大值,因此无法进行准确的转换。因此,所得到的int的值由实现来决定。对于CCD_ 20和CCD_ 21之间的转换也是如此。