C++ 同类数字类型之间的转换
我在看书。它说:C++ 同类数字类型之间的转换,c++,type-conversion,implicit-conversion,primitive-types,C++,Type Conversion,Implicit Conversion,Primitive Types,我在看书。它说: 否则,如果在相同类型的数字类型之间进行转换 (整数到整数或浮点到浮点),转换有效, 但该值是特定于实现的(并且可能不可移植) 但我真的不明白上面的话是什么意思?有人能用一个简单的例子解释一下吗?为什么相同类型的数字类型之间的转换会产生特定于实现的值?原因是什么? 让我们考虑下面的例子: long-long-int-lli=5000000000; 龙英利; int i; li=lli; i=li; 你能预测lli、li和i的值吗?或者li和i是否具有相同的值 答案是-值
- 否则,如果在相同类型的数字类型之间进行转换 (整数到整数或浮点到浮点),转换有效, 但该值是特定于实现的(并且可能不可移植)
但我真的不明白上面的话是什么意思?有人能用一个简单的例子解释一下吗?为什么相同类型的数字类型之间的转换会产生特定于实现的值?原因是什么?
让我们考虑下面的例子:
long-long-int-lli=5000000000;
龙英利;
int i;
li=lli;
i=li;
你能预测lli
、li
和i
的值吗?或者li
和i
是否具有相同的值
答案是-值取决于为每种类型分配的字节数!
也就是说,在某些情况下,
int
等于long int
,在其他情况下,long int
等于long long int
,但一般来说,long
er类型可以更长。对于float
、double
和long 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;
}
正如您所看到的,
long
integer的最大值超过了普通整数的容量。但是,您可以将long
转换为int
(即,转换有效),但由于int
无法保持long
的最大值,因此无法进行准确的转换。因此,结果int
的值由实现决定。对于<代码>长双倍/代码>和7fffffffffffffff
ffffffff
1.18973e+4932
inf