同类数字类型之间的转换
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;
你能预测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;
}
输出:
7fffffffffffffff
ffffffff
1.18973e+4932
inf
正如您所看到的,long long
整数的最大值超过了普通整数的容量。然而,您可以将long long
转换为int
(即,转换有效),但由于int
无法保持long long
的最大值,因此无法进行准确的转换。因此,所得到的int
的值由实现来决定。对于CCD_ 20和CCD_ 21之间的转换也是如此。
相关文章:
- 构造函数和转换运算符之间的重载解析
- C ++中无符号位长度类型之间的隐式转换,即uint8_t,uint16_t
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 派生类(构造函数具有参数)和基类(构造函数缺少参数)之间没有可行的转换
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 如何在 std::string 和 Aws::String 之间进行转换?
- 转换字符时Arduino DUE 和 Arduino UNO 之间的区别
- 如何使用静态多态性在 int 和指针类型之间进行转换?
- 指向 POD 类型的指针之间的静态转换与重新解释转换
- 在 Rcpp 中的字符串类型之间转换时出错
- 如何声明不同类型的模板化类之间的转换
- C 和 C++ 中的函数指针转换之间的差异
- 与浮点转换之间的规范化整数
- 重新解释强制转换和 C 样式转换之间的 C++ 区别
- C++ get 和类型转换之间的用法有什么区别?我应该使用哪一个?
- printf函数参数之间的序列点;转换之间的顺序点是否重要
- Clang和GCC中不明确基类转换之间的行为差异
- 转换之间的双和字节数组,为传输ZigBee API
- 隐式转换和显式转换之间的区别
- interpret_cast和C样式强制转换之间的区别是什么