Java打印int类型的二进制数

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再输出,直接输出不行吗?

不行!如果不对结果进行判断而是直接输出,则会返回二进制位所对应的十进制数

例如:

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值