[英]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
integer 的最大值超過了普通整數的容量。 但是,您可以將long long
轉換為int
(即轉換有效),但由於int
不能保持long long
的最大值,因此無法進行准確的轉換。 因此,結果int
的值由實現決定。 long double
和double
之間的轉換也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.