for (int i = 31; i >= 0; i--) {
System.out.print((num & (1 << i)) == 0 ? "0" : "1");
}
1<<i
表示1的二级制位左移i位
i=0:0000000000000001
i=1:0000000000000010
&运算
将两个数的二进制的每一位进行比较,只有两个都为1时,结果的相应二进制位才为1
例如:
0101 1011 0101 0010
1010 0010 1101 1101
两个二进制数进行&运算后,结果为
0000 0010 0101 0000
num&(1<<i)==0
i从31开始,逐次递减直到0,可以让num与一个每次只有一个位置为1的32位的二进制数进行&运算,只有num的二进制数的那个位置也为1时,结果才不为0。也就是说,如果结果为0,说明num的二进制的当前位置一定是0,否则一定是1。
为什么最后要转换成字符串的0和1再输出,直接输出不行吗?
不行!如果不对结果进行判断而是直接输出,则会返回二进制位所对应的十进制数
例如: