c ++中unsigned long long的问题

时间:2011-04-15 11:08:39

标签: java c++ g++ unsigned-long-long-int

我有一个cpp文件说xyz.cpp,其中包含长常量。现在我需要将长常数更改为long long。

ex   
long a=0x00000001

long long a=0x0000000000000001

以备将来使用。 (我使用gcc编译器) 但是,当我这样做时,我得到“整数值是大到持有长值”的错误。 当通过互联网浏览时,我得到了一个像使用一样的建议,

long long a=0x0000000000000001ULL .

工作得很好。但问题是我是一个jar文件,需要将此.cpp文件转换为.java。当它尝试从.java文件转换.cpp文件时,它无法识别ULL。

现在我的问题是

1,对于这个场景来说,无论如何我的gcc编译器要接受long long值,而不是添加ULL @ end 2,或者建议我在.java文件中应该做什么来接受那个long long值(ULL)(我知道java只有长值可以保存很长的值)

提前感谢:)

3 个答案:

答案 0 :(得分:1)

由于C ++不会在不修改源代码的情况下编译为java,因此可以删除ULL / LL后缀(并将long long更改为long)。您只需要将其添加到转换时要更改的内容列表中 - 我没有看到问题?

答案 1 :(得分:0)

那么,您究竟想要做什么,将C ++代码转换为Java?

Java没有无符号整数类型,Java中也不存在C ++中的“long long”类型。 Java具有以下整数类型:

byte - 8位有符号整数

short - 16位有符号整数

int - 32位有符号整数

long - 64位有符号整数

(还有char,它在技术上是一个16位无符号整数,但它用于保存字符数据。)

如果您需要使用不适合BigInteger的数字,可以在Java中使用long

答案 2 :(得分:0)

long可以在Java中保存64位,并且在重要的地方使用签名行为。但是,这并不能阻止您在其中存储无符号的64位值。你需要为某些操作编写工作,但+, - ,*,==,!=等都完全一样。