2014-10-16 44 views
0

我想通過查看C++類來編寫一些Java中的東西。在我們的C++類中,我們有一個變量聲明像這樣 -如何從Java中的C++表示numeric_limits?

static constexpr uint32_t NUMBER_OF_RECORDS = std::numeric_limits<uint32_t>::max(); 

如何在Java中編寫類似的變量聲明?

+1

你需要這個完全相同(即無符號)嗎? – 2014-10-16 23:17:44

+0

你不能,因爲Java沒有無符號整型。 – leemes 2014-10-17 00:00:44

回答

3

使用Integer.MAX_VALUE

static final int NUMBER_OF_RECORDS = Integer.MAX_VALUE; 

的區別是在Java中,int簽字(作爲int32_t然後)

3

我相信你正在尋找的東西是這樣的:

static final int NUMBER_OF_RECORDS = Integer.MAX_VALUE; 

在Java中,所有Integers簽名。如果需要表示無符號整數的最大值,則需要使用Long。但是,Long可以表示比無符號整數更大的值。

unsigned integer可以代表2^32 - 1
signed integer最大值可以表示2^31 - 1
最大值甲long(在Java)可以表示2^63 - 1

最大值可以找到的完整圖java和其他語言的數據類型在這裏:Integer (Computer Science)

如果你真的需要無符號整數的最大值,你可以這樣做(除其他外)

static final long NUMBER_OF_RECORDS = (long)Math.pow(2, 32) - 1; 
+0

'Math.pow(2,63) - 1'真的嗎?首先,爲什麼使用浮點數學函數來表示整數文字常量?如果您不喜歡文字,則可以使用位移而不是'Math.pow'來表達兩個冪。其次,無符號整數(32位)的最大值是「2^32-1」,而不是「2^63-1」。 – leemes 2014-10-17 00:04:01

+0

有很多方法可以做到(我在我的回答中提到過)。 Math.pow易於閱讀。高效?也許不會。另外,您似乎誤解了我的答案的一部分,因爲我明確指出無符號整數可以表示最大值2^32-1 – Justin 2014-10-17 00:10:03

+0

我指的是「如果您確實需要**無符號的最大值整數**」;然後你寫一個** signed long **的最大值。 – leemes 2014-10-17 00:12:40

3

我相信你可以使用Integer.MAX_VALUE

public static final int NUMBER_OF_RECORDS = Integer.MAX_VALUE; 
1

你有足夠的Integer.MAX_VALUE的答案。如果您需要C++片段中的實際值,則需要使用64位JAVA long,因爲在JAVA中沒有無符號整數。 那麼你的代碼將是:

static final long NUMBER_OF_RECORDS = 0xffffffffl; 

(注意末尾的「L」爲long文字)

這是不一樣的獲得一個數字的限制,但如果你可能需要希望移植一個C++庫並保留完整的功能。