import java.math.BigInteger;
public class Lesson1_1{
/**
* @Description:十进制转换成二进制
* @param decimalSource
* @return String
*/
public static String demicalToBinary(int decimalSource) {
BigInteger bi = new BigInteger(String.valueOf(decimalSource)); //转换成BigInteger
return bi.toString(2); //参数2指定的是转化成二进制
}
/**
* @Description:二进制转换成十进制
* @param binarySource
* @return int
*/
public static int binaryToDecimal(String binarySource) {
BigInteger bi = new BigInteger(binarySource, 2); //转换为BigInteger类型,参数2指定二进制
return Integer.parseInt(bi.toString()); //默认转换成十进制
}
}
import java.math.BigInteger;
public class Lesson1_2{
/**
* @Description:向左移位
* @param num- 等待移位的十进制数,m- 向左移的位数
* @return int- 移位后的十进制数
*/
public static int leftShift(int num, int m) {
return num << m;
}
/**
* @Description:向右移位
* @param num- 等待移位的十进制数,m- 向右移的位数
* @return int- 移位后的十进制数
*/
public static int rightShift(int num, int m) {
return num >>> m;
}
}
左移位是<<,那右移位为什么是>>>而不是>>呢
其实>>也是右移操作
根本原因是Java的二进制数值中最高一位是符号位
Java里定义了两种右移:逻辑右移和算术右移
逻辑右移1位,左边补0即可;算术右移保持符号位不变,除符号位以外的右移一位并补符号位1,补的1仍然在符号位之后
import java.math.BigInteger;
public class Lesson1_3{
/**
* @Description:二进制按位或的操作
* @param num1- 第一个数字,num2- 第二个数字
* @return 二进制按位或的结果
*/
public static int or(int num1, int num2) {
return (num1 | num2);
}
/**
* @Description:二进制按位与的操作
* @param num1- 第一个数字,num2- 第二个数字
* @return 二进制按位与的结果
*/
public static int and(int num1, int num2) {
return (num1 & num2);
}
/**
* @Description:二进制按位异或的操作
* @param num1- 第一个数字,num2- 第二个数字
* @return 二进制按位异或的结果
*/
public static int xor(int num1, int num2) {
return (num1 ^ num2);
}
}
二进制贯穿在很多常用的概念和思想中,例如逻辑判断、二分法、二叉树等等。
逻辑判断中的真假值就是用二进制的1和0来表示的。
二分法和二叉树都是把要处理的问题一分为二,正好也可以通过二进制的1和0来表示。
移位操作:二进制左移一位,就是将数字翻倍。二进制右移一位,就是将数字除以2并求整数商。
逻辑操作:或:参与操作的位中只要有一个是1,最终结果就是1.
与:参与操作的位中必须全都是1,最终结果才是1,否则就为0.
异或:参与操作的位相同,最终结果就为0,否则为1.