先直接上完整代码:
public class Test {
public static void main(String[] args) {
int num = 100;
System.out.println(toBinary(num));
System.out.println(toQuaternary(num));
System.out.println(toOctal(num));
System.out.println(toHexadecimal(num));
}
//将十进制转化为二进制
public static String toBinary(int num){
return trans(num, 2, 1);
}
//将十进制转化为四进制
public static String toQuaternary(int num){
return trans(num, 4, 2);
}
//将十进制转化为八进制
public static String toOctal(int num){
return trans(num, 8, 3);
}
//将十进制转化为十六进制
public static String toHexadecimal(int num){
return trans(num, 16, 4);
}
/**
* 将十进制数num转换成base进制数
* @param num 十进制数
* @param base 进制数
* @param offset 右移位数
*/
public static String trans(int num, int base, int offset){
if(num == 0){
System.out.println("0的"+ base + "进制是0");
return "0的"+ base + "进制是0";
}
char[] arr = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
StringBuffer sb = new StringBuffer();
while(num != 0){
int temp = num&(base-1); //位运算 底层是两个二进制数来实现的运算
sb.append(arr[temp]);
num = num >>> offset; //无符号位右移
}
sb = sb.reverse(); //反转
return sb.toString();
}
}
逻辑运算总结:
1、逻辑运算符:就是指的是一种关系,作用:用于连接两个布尔类型的表达式
包括以下几种:
&:与,特点:两边为真才为真,一边为假则为假
| 或,特点:一边为真则为真,两边为假才为假
! 非,特点:非真为假,非假为真
^ 异或 特点:同为假,异为真 规律:一个数同时异或这个数两次结果还是这个数。用于加密
&& 双与 特点:与&一样,但是有点小区别,在下面单独讨论。
|| 双或 特点:与|一样,但是有点小区别,在下面单独讨论。
<<:左移 规律:左移几位就是该数乘以2的几次方,
>>:右移:规律:右移几位就是除以2的几次方
注意对于左移和右移中高位的问题,总结为一句话:简单一句话:最高是什么就拿什么补,高位为0就拿0补,高位为1就拿1补;
>>>:无符号右移:区别于>>就是高位出现的空位,无论高位原来是什么都用0补;
2、&与&&的区别:
共同点:二者都可以作为逻辑与的运算符,表示逻辑与,
不同点:&&有短路的功能,如果第一个表达式为false时,不需要进行第二个表达式的运算,
当&操作符两边的表达式不是boolean类型时,表示按位与操作。Eg:我们通常使用0x0f来与一个整数进行&运算,获取低四位;
3、|和||的区别:
|:无论左边的运算结果是什么,右边都参与运算。
||:当左边为真时,右边不参与运算的。