引入

网上经常能看到一些关于位运算的奇技淫巧,这两天看到一个很基础但又很容易被忽略的问题:如何打印一个整型的二进制格式?初看时还懵了一下,所以本着总结的目的,本文详细说一下解题的思路。

思路

众所周知,Java中int类型的数在底层按4个字节存储,也就是32位,所以一个int类型数值的二进制格式有32位,我们要做的就是确定每一位的数值并打印出来。
为了确认每一位的值,我们要引入按位与运算符&。让每一位上的值(0或1)和1进行按位与运算,如果值为0则结果为0,如果值为1则结果为1,那该位的值不就确定了吗?如此从第0位到第31位反复,就可以得到完整的二进制格式。
关键的思路就是这样,至于怎么让每一位上的值(0或1)和1进行按位与运算,每个人可能有不同的办法,我感觉比较直观的还是用左移运算符<<,让数字1左移i位然后和int类型的数进行按位与运算(按位与运算符&会默认将参与运算的数转换成二进制格式),得到的结果就是第i位的数值。
也有人可能会选择让int类型的数右移来达到相同的目的,这都是可以的,关于位运算符的具体使用,这里就不再赘述了。

代码实现

package com.test;

import java.util.Scanner;

public class Test {
    public static void decToBin(int num){
        for(int i = 31; i >= 0; i--){
            System.out.print((num & (1 << i)) == 0 ? "0" : "1");
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个整型数值:");
        int num = sc.nextInt();
        System.out.print("该整型数值的二进制格式为:");
        decToBin(num);
    }
}

可以看到,decToBin方法的实现真的很简单,引入三目运算符之后代码量更是只有短短两三行,所以也是属于看过了就会,没看过可能会懵的一类问题。