本文最后更新于: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
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!