簡體   English   中英

同類數值類型之間的轉換

[英]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是否具有相同的值?

答案是 - 值取決於為每種類型分配的字節數! 即在某些情況下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 integer 的最大值超過了普通整數的容量。 但是,您可以將long long轉換為int (即轉換有效),但由於int不能保持long long的最大值,因此無法進行准確的轉換。 因此,結果int的值由實現決定。 long doubledouble之間的轉換也是如此。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM