Java8是一年一次的实现。逻辑运算符是什么意思?
我正在研究DateAPI的Java8实现,发现了这一点 根据ISO proleptic检查年份是否为闰年 日历系统规则 此方法将当前规则应用于整个闰年 时间线。一般来说,如果一年可以被一个数整除,那么它就是闰年 四个没有余数。然而,可以被100整除的年份不是闰年 年,但可被400整除的年除外 例如,1904年是闰年,它可以被4整除。1900年不是一年 闰年可以被100整除,而2000年是闰年 它可以被400整除 该计算是proleptic的——将相同的规则应用到far中 未来和遥远的过去。这在历史上是不准确的,但却是正确的 适用于ISO-8601标准 但是给我们一年的时间&3 什么是第一年&3年Java8是一年一次的实现。逻辑运算符是什么意思?,java,api,java-8,Java,Api,Java 8,我正在研究DateAPI的Java8实现,发现了这一点 根据ISO proleptic检查年份是否为闰年 日历系统规则 此方法将当前规则应用于整个闰年 时间线。一般来说,如果一年可以被一个数整除,那么它就是闰年 四个没有余数。然而,可以被100整除的年份不是闰年 年,但可被400整除的年除外 例如,1904年是闰年,它可以被4整除。1900年不是一年 闰年可以被100整除,而2000年是闰年 它可以被400整除 该计算是proleptic的——将相同的规则应用到far中 未来和遥远的过去。这在历
(prolepticYear&3)=0
检查prolepticYear
的两个最低有效位是否为0
这相当于检查prolepticYear
是否可被4整除
换句话说,
(prolepticYear & 3) == 0
相当于
(prolepticYear % 4) == 0
prolecticyear&3
让我们把它稍微不同一点<二进制代码>3是11
。因此,prolepticYear
&11
只有在prolepticYear
的最后两位为零时才会为零。(这实际上被称为位掩码)
现在想想也有点不同:
0100 - (4 in decimal, has last two bits zero)
1000 - (8 in decimal, has last two bits zero)
1100 - (12 in decimal, has last two bits zero)
... these are numbers divisible by four
通常&
操作比%
更快
有时
&
也被用于其他目的(%
操作可能会产生负数,而&
不会-这就是如何根据键#hashcode
的可能负值来选择HashMap
中的bucket,但这里不是这种情况)prolepticYear&3
相当于prolepticYear%4
(至少在年份>=0)。
(prolepticYear % 4) == 0
0100 - (4 in decimal, has last two bits zero)
1000 - (8 in decimal, has last two bits zero)
1100 - (12 in decimal, has last two bits zero)
... these are numbers divisible by four