Java-基础类
Java-基础类
int
在 Java 中,int
类型是32位的。它表示一个32位的带符号整数,范围从 -2^31
到 2^31 - 1
,即从 -2147483648
到 2147483647
(±21亿)。
为什么不是64位?
Java中的
int
类型是32位的,而不是64位,是由于历史原因和平台兼容性考虑。当Java语言设计之初,主要关注了内存效率和性能。32位整数的操作对于许多应用程序来说足够,并且可以更有效地使用内存。此外,Java的设计目标之一是在各种平台上实现一致性,包括32位和64位的操作系统。因此,为了保持跨平台的一致性,Java选择了32位整数。
随着时间的推移,Java确实引入了64位的原始数据类型,即
long
类型,以满足更大范围的整数需求。因此,如果需要更大的整数范围,可以使用long
类型。但对于一般的整数操作,使用32位的int
类型通常足够,并且可以提供更好的性能和内存效率。
long
在Java中,long
类型是64位的,表示一个64位的带符号整数。long
的范围从 -2^63
到 2^63 - 1
,即从 -9223372036854775808
到 9223372036854775807
(±922亿亿)。这提供了更广泛的整数范围,适用于需要处理非常大的整数值的情况。
Integer
Integer
是int
的包装类型,其中包含一个IntegerCache
类,缓存了-128~127的所有数字。
可通过jvm参数
java.lang.Integer.IntegerCache.high
来调整最大值
numberOfLeadingZeros(int i)
返回指定int值的二进制补码二进制表示形式中最高位(“最左边”)一位之前的零位数。如果指定值在其二进制补码表示形式中没有一位(换句话说,如果它等于零),则返回 32。
请注意,此方法与以 2 为底的对数密切相关。对于所有正int值 x:
下限(log 2 (x)) = 31 - numberOfLeadingZeros(x)
ceil(log 2 (x)) = 32 - numberOfLeadingZeros(x - 1)
形参:
i – 要计算前导零数量的值
返回值:
指定int值的二进制补码二进制表示形式中最高位(“最左边”)一位之前的零位数,如果该值等于零,则为 32。
自:
1.5
入参 结果 说明 0 32 0的二进制标识为(32个0) 00000000000000000000000000000000
7 8 7的二进制标识为(29个0) 00000000000000000000000000000111
15 16 15的二进制标识为(28个0) 00000000000000000000000000001111