我可以以某种方式使用0x表示法长

hor*_*rgh 3 java

使用SMPP协议我曾经long用来表示system_id类型字段的值unsigned int(4字节).在协议本身中,字段值以十六进制格式指定.所以我想在我的代码中保留它.在尝试比较我写的变量值时:

long id = ...;
//...
if(id == 0x80000009){...}
Run Code Online (Sandbox Code Playgroud)

并且发现java解释0x80000009int,这是签名的4字节int,因此发生溢出并且比较失败:

id         == 2147483657
0x80000009 ==-2147483639
Run Code Online (Sandbox Code Playgroud)

然后我尝试了显式类型转换,即id == (long)0x80000009- 相同的结果.然后我声明变量如下:

static final long bind_transceiver_resp = 0x80000009;
Run Code Online (Sandbox Code Playgroud)

但它仍然是一个溢出的int价值.

那么有没有办法使用0x值大于Integer.MAX_VALUE?的符号?

Daw*_*ica 6

将L放在文字的末尾.0x80000009L是2147483657.请注意,小写l也适用,但我不推荐它,因为在许多字体中,它看起来像第一.

  • 也许http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html上的页面将满足您的需求(尽管我很惊讶它没有提到八进制). (2认同)