进制转换
简单的十六进制数与十进制之间的转换
import java.util.Scanner;
//单个数字的转换
public class Hello {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个十六进制数\n");
String x = sc.nextLine();
char a = x.charAt(0);
if(a>='0'&&a<='9'){
System.out.println(a);
}else if(a>='A'&&a<='F'){
System.out.println((a-'A')+10);
}else if(a>='a'&&a<='f'){
System.out.println((a-'a')+10);
}else{
System.out.println("输入错误\t程序结束");
}
}
}
完整的十六进制数转换成十进制
- 思路即是写一个循环,在循环中用要转换的十进制数除16,将余数转换成十六进制数表示,而商则继续除16,等到商为0的时候则退出循环,这个过程,对每次的余数都进行了拼接,最后再进行翻转,即可得到转换的十六进制数。
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个十进制数\n");
int num = sc.nextInt();
int yushu;
int shang;
String hex = "";
while(true){
shang = num / 16;
yushu = num % 16;
if(yushu>=0&&yushu<=9){
char b = (char)(yushu + '0'); // 这里转成不加0会无法通过的
hex += b;
}else if(yushu>=10&&yushu<=15){
hex += (char) ((yushu - 10) + 'A');
}
num = shang;
if(shang <= 0){
StringBuffer sb = new StringBuffer(hex);
sb = sb.reverse();
System.out.println("这个数的十六进制是:" + sb);
break;
}
}
}
}
十进制转二进制
- 与上文的思路一致,只不过这里对负数进行了特殊处理。
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个十进制数\n");
int num = sc.nextInt();
boolean flag = false;
if(num<0){
flag = true;
num = (int) (Math.pow(2,31) + num); //我们观察发现0和2^31次方二进制低位一样,那么就用这个规律,一个负数加上2^31就会得到跟这个数字相同的低位
}
int yushu;
int shang;
String hex = "";
int count = 0;
while(true){
shang = num / 2;
yushu = num % 2;
char b = (char)(yushu + '0'); // 这里转成不加0会无法通过的
hex = b + hex;
num = shang;
count++;
if(count%4 == 0){
hex = "_" + hex;
}
if(count == 31){
if(flag == true){
hex = "1" + hex;
}
else{
hex = "0" + hex;
}
System.out.println("这个数的二进制是:" + hex);
break;
}
}
}
}