簡體   English   中英

有符號整數和無符號整數之間的轉換

[英]Conversion between signed integer and unsigned integer

如果將無符號整數轉換為有符號整數然后進行回退,是否可以保證獲得原始值? 例如,根據C ++標准,此函數是否始終對任何平台上的任何x返回true

bool f(unsigned int x)
{
    return x == static_cast<unsigned int>(static_cast<int>(x));
}

這個如何?

bool g(int x)
{
    return x == static_cast<int>(static_cast<unsigned int>(x));
}

對於fg ,答案都是“不,這不能保證”。

這是標准說明的內容:

4.7積分轉換

  1. 如果目標類型是無符號的,則結果值是與源整數一致的最小無符號整數(取模2 n ,其中n是用於表示無符號類型的位數)。 [注意:在二進制補碼表示中,此轉換是概念性的,並且位模式沒有任何變化(如果沒有截斷)。 —尾注]
  2. 如果目標類型是帶符號的,則該值可以在目標類型中表示,則該值保持不變。 否則,該值是實現定義的。

第2節討論函數g xunsigned可能會導致在不使用二進制補碼表示形式的系統上更改表示形式,因此將數字轉換回可能會獲得不同的值。

第三節討論函數f 當數字超出signed int的范圍時,結果是實現定義的,因此不允許對將其轉換回unsigned的結果提出任何主張。

暫無
暫無

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

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