假设我有两个整数,一个是十进制的,另一个是十六进制的:
int myInt01 = 0xc7d23020;
int myInt02 = 3352440864;
两者都是相同的数字,但是当我尝试将十进制整数分配给Java中的变量时,我得到错误:
error: integer number too large: 3352440864
但是当我将十六进制整数分配给Java中的变量时,一切都按预期工作。
为什么会这样?
答案 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);