本文最后更新于:4 个月前

需求

要求输入位数n,生成所有情况的二进制数并存进数组

实现

import java.util.ArrayList;
import java.util.List;

/**
 * @Classname BinaryList
 * @Description 输入位数n,生成所有情况的二进制数并存进数组
 * @Date 2020/3/12 上午 11:54
 * @Created by MelodyJerry
 */
public class BinaryList {
    public static void main(String[] args){
        List<String> list = new ArrayList<String>();
        int n = 4; //二进制位数
        int i = 1;
        for(int j = n; j > 0; j--){
            i = i * 2; //对应位权
        }
        for(i = i-1 ; i >= 0; i--){
            //System.out.println(i);
            String bin = Integer.toBinaryString(i);
            while(bin.length() < n){
                bin = "0"+bin;
            }
            //System.out.println(bin);
            list.add(bin);
        }
        for(String entry : list){
            System.out.println(entry);
        }
    }
}

需求

用户输入一个整数,程序输出该数的二进制

实现

package org.pcl;
 
import java.util.Scanner;
 
/**
 * 用户输入一个整数,程序输出该数的二进制
 * 
 * @version 1.0 2014-05-05
 * @author yifan
 */
public class OutBinary {
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入一个整数:");
		int number = scan.nextInt();
		
		int tmp = 1<<31; //用于计算的临时变量
		
		System.out.println();
		for(int i=0; i<Integer.SIZE-1; i++) {
			//System.out.print(number &(tmp>>>=1));
			System.out.print( (number &(tmp>>>=1))>0? 1:0);
		}
		System.out.println();
		if(scan != null) {
			scan.close();
		}
	}
 
}

该实现代码由CSDN博主「yfstdio」提供
原文链接:https://blog.csdn.net/yfstdio/article/details/25079563

需求

二、八、十六进制输出

实现

一、未使用移位运算

public static void main(String[] args) {
		int a = -17;
		System.out.println("二进制输出"+Integer.toBinaryString(a));
		
		System.out.println("八进制输出"+Integer.toOctalString(a));
		System.out.printf("八进制输出"+"%010o\n",a);
        //按10位十六进制输出,向右靠齐,左边用0补齐
		
		System.out.printf("十六进制输出"+"%010x\n",a);
        //按10位八进制输出,向右靠齐,左边用0补齐
		System.out.println("十六进制输出"+Integer.toHexString(a));
		System.out.println();
		
		
		int b = 17;
		System.out.println("二进制输出"+Integer.toBinaryString(b));
		
		System.out.println("八进制输出"+Integer.toOctalString(b));
		System.out.printf("八进制输出"+"%010o\n",b);
		
		System.out.printf("十六进制输出"+"%010x\n",b);
		System.out.println("十六进制输出"+Integer.toHexString(b));
	}
	
/* 运行结果:
二进制输出11111111111111111111111111101111
八进制输出37777777757
八进制输出37777777757
十六进制输出00ffffffef
十六进制输出ffffffef
 
二进制输出10001
八进制输出21
八进制输出0000000021
十六进制输出0000000011
十六进制输出11
*/

二、使用移位运算

public static void main(String[] args) {
		int a = -5;
		System.out.println(a);
		System.out.println("二进制输出"+Integer.toBinaryString(a));
		System.out.println(a+"<<2"+"="+(a<<2));
		System.out.println("二进制输出"+Integer.toBinaryString(a<<2));
		System.out.println(a+">>2"+"="+(a>>2));
		System.out.println("二进制输出"+Integer.toBinaryString(a>>2));
		System.out.println("无符号右移"+a+">>>2"+"="+(a>>>2));
		System.out.println("二进制输出"+Integer.toBinaryString(a>>>2));
		System.out.println();
		int b = 5;
		System.out.println(b);
		System.out.println("二进制输出"+Integer.toBinaryString(b));
		System.out.println(b+"<<2"+"="+(b<<2));
		System.out.println("二进制输出"+Integer.toBinaryString(b<<2));	
		System.out.println(b+">>2"+"="+(b>>2));
		System.out.println("二进制输出"+Integer.toBinaryString(b>>2));
		System.out.println("无符号右移"+b+">>>2"+"="+(b>>>2));
		System.out.println("二进制输出"+Integer.toBinaryString(b>>>2));
	}

/* 运行结果:
-5
二进制输出11111111111111111111111111111011
-5<<2=-20
二进制输出11111111111111111111111111101100
-5>>2=-2
二进制输出11111111111111111111111111111110
无符号右移-5>>>2=1073741822
二进制输出111111111111111111111111111110
 
5
二进制输出101
5<<2=20
二进制输出10100
5>>2=1
二进制输出1
无符号右移5>>>2=1
二进制输出1
*/

左移运算符<<

1、a<<n 将a的二进制数据左移b位,右边移空的部分补0

可以理解为数字a= a2^n(移了n位)。5<<2 –>52^2=20 -5<<2^2=-20

2、a>>n 将a的二进制数据右移b位,如果最高位是0,则左边移空的部分补0,如果最高位是1,则左边移空的部分补1

可以理解为数字a= a/2^n(移了n位),向下取整。5>>2 —> 5/2^2=1; 3、-5>>2 –> -5/2^2=-2 (向下取整)

a>>>n 不管最高位是0或1,左边移空部分都补0

正数可以按右移计算,负数没有捷径。

本实现代码由 CSDN博主「qq_36503510」提供
原文链接:https://blog.csdn.net/qq_36503510/article/details/83957214


 目录