在Java代码中一个数看起来是十进制,其实底层都是 2进制的数 。
int 整形是 32位的 二进制数。 Long 类型是64位的。
打印一个 int 整形数字, 32位的二进制数如下 :
public static void main(String[] args) {
int a = 3;
print(a);
}
public static void print(int num ){
for(int i =31 ; i >= 0 ; i--){
System.out.print((num & (1 << i )) == 0 ? "0" : "1");
}
System.out.println();
}
结果:
00000000000000000000000000000011
1:00000000000000000000000000000001
2:00000000000000000000000000000010
3: 00000000000000000000000000000011
4: 00000000000000000000000000000100
这就是一个32位的二进制数,
从 0 ~ 31 位。从右侧开始是0,到最左侧是第31位。分别对应 2⁰ ~ 2³¹ 。
如果该位置位1,则计算;为0,则不计算
首先解释下代码含义
| & | 与 | 两个位都为1时,结果才为1 |
| << | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |



