为什么Java中这两个不同的整数表示(dec与十六进制)不同?

时间:2016-02-26 02:33:36

标签: java hex decimal

假设我有两个整数,一个是十进制的,另一个是十六进制的:

int myInt01 = 0xc7d23020;
int myInt02 = 3352440864;

两者都是相同的数字,但是当我尝试将十进制整数分配给Java中的变量时,我得到错误:

error: integer number too large: 3352440864

但是当我将十六进制整数分配给Java中的变量时,一切都按预期工作。

为什么会这样?

3 个答案:

答案 0 :(得分:5)

这是因为0xc7d23020被解释为-942526432这是有效的int值,而3352440864显然是错误的int值,因为它高于2147483647限制error: (-215) (depth == CV_8U || depth == CV_32F) && type == _templ.type() && _img.dims() <= 2 in function matchTemplateMask;

答案 1 :(得分:2)

我想这是预期的行为:这个数字的二进制表示具有最高位设置,采用32位数据类型。由于在Java int中是有符号数据类型,因此最高有效位保留用于数字的符号。因此,该数字不是有效的正数。这就是编译器告诉你的。但是,由于它是一个有效的负整数,因此在使用十六进制表示法分配它时不会抱怨。

您可以尝试使用十六进制表示将一个需要超过32位的数字分配给整数变量。这将导致编译器错误。

答案 2 :(得分:0)

int变量可容纳的最大值为2147483647。这就是它给出错误的原因。您可以通过以下方式自行检查:System.out.println(Integer.MAX_VALUE);

找出int变量可以容纳的最小值System.out.println(Integer.MIN_VALUE);