2012-04-25 27 views
2

如果我需要獲取最大值,將-1賦值給unsigned int或其他無符號C++數據類型是否安全?將-1分配給unsigned int以獲取最大值是否安全?

是否有任何情況下,它不會給我一個無符號數據類型可以包含的最高值?

+1

[測試最大無符號值]的可能重複(http://stackoverflow.com/questions/4539469/testing-for-a-maximum- unsigned-value) – 2012-04-25 07:00:04

+0

使用常量UINT_MAX – 2012-04-25 07:00:28

+0

@juergen這將工作unsigned int,但不適用於所有其他未簽名的數據類型。 – 2012-04-25 07:06:20

回答

10

爲了安全起見,請使用std::numeric_limits<unsigned int>::max()。 將-1轉換爲無符號可以在主流平臺上運行,但標準AFAIR無法保證。

UPD:我會糾正自己。 (無符號)-1要求是UINT_MAX在C,一看便知here

+3

將-1轉換爲'unsigned'類型可以保證按標準工作。問題在於意圖不是很清楚。使用'std :: numeric_limits :: max()'它非常清楚。非常詳細,但也很清楚。 – 2012-04-25 07:29:44

+0

您的更新引用了一個c問題,該問題又引用了c標準。 C++標準說無符號整數「應服從算術模2^n的定律」。最終效果是一樣的。 – 2012-04-25 08:19:37

-1

認爲你任何的補臺機器上使用-1(我認爲這是現在一切)是好的。

+0

有沒有聽說過嵌入式系統? – RedX 2012-04-25 07:11:17

+0

沒有任何支持使用1s補碼的C++編譯器。你知道嗎? – 2012-04-25 07:14:23

+0

我認爲曾經有一個關於奇怪平臺的問題,並且有幾個例子,但是它們與C有關。對於C++你可能是對的。 – RedX 2012-04-25 07:22:28

相關問題