我想通過查看C++類來編寫一些Java中的東西。在我們的C++類中,我們有一個變量聲明像這樣 -如何從Java中的C++表示numeric_limits?
static constexpr uint32_t NUMBER_OF_RECORDS = std::numeric_limits<uint32_t>::max();
如何在Java中編寫類似的變量聲明?
我想通過查看C++類來編寫一些Java中的東西。在我們的C++類中,我們有一個變量聲明像這樣 -如何從Java中的C++表示numeric_limits?
static constexpr uint32_t NUMBER_OF_RECORDS = std::numeric_limits<uint32_t>::max();
如何在Java中編寫類似的變量聲明?
static final int NUMBER_OF_RECORDS = Integer.MAX_VALUE;
的區別是在Java中,int
簽字(作爲int32_t
然後)
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#MAX_VALUE
Integer.MAX_VALUE
Integer
是原始類型int
的包裝類。
我相信你正在尋找的東西是這樣的:
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;
'Math.pow(2,63) - 1'真的嗎?首先,爲什麼使用浮點數學函數來表示整數文字常量?如果您不喜歡文字,則可以使用位移而不是'Math.pow'來表達兩個冪。其次,無符號整數(32位)的最大值是「2^32-1」,而不是「2^63-1」。 – leemes 2014-10-17 00:04:01
有很多方法可以做到(我在我的回答中提到過)。 Math.pow易於閱讀。高效?也許不會。另外,您似乎誤解了我的答案的一部分,因爲我明確指出無符號整數可以表示最大值2^32-1 – Justin 2014-10-17 00:10:03
我指的是「如果您確實需要**無符號的最大值整數**」;然後你寫一個** signed long **的最大值。 – leemes 2014-10-17 00:12:40
我相信你可以使用Integer.MAX_VALUE
像
public static final int NUMBER_OF_RECORDS = Integer.MAX_VALUE;
你有足夠的Integer.MAX_VALUE
的答案。如果您需要C++片段中的實際值,則需要使用64位JAVA long
,因爲在JAVA中沒有無符號整數。 那麼你的代碼將是:
static final long NUMBER_OF_RECORDS = 0xffffffffl;
(注意末尾的「L」爲long
文字)
這是不一樣的獲得一個數字的限制,但如果你可能需要希望移植一個C++庫並保留完整的功能。
你需要這個完全相同(即無符號)嗎? – 2014-10-16 23:17:44
你不能,因爲Java沒有無符號整型。 – leemes 2014-10-17 00:00:44