進位轉換:
【2進位】 轉成 【16進位】,並且印出算式
16進位要轉成2進位的方法:
16=2*2*2*2
表示【1個16進位】的數字會變成【4個2進位】的數字,
0=0000、1=0001、2=0010、3=0011、4=0100、5=0101
6=0110、7=0111、8=1000、9=1001、A=1010、B=1011
C=1100、D=1101、E=1110、F=1111
【2進位】 轉成 【16進位】,並且印出算式
16進位要轉成2進位的方法:
16=2*2*2*2
表示【1個16進位】的數字會變成【4個2進位】的數字,
0=0000、1=0001、2=0010、3=0011、4=0100、5=0101
6=0110、7=0111、8=1000、9=1001、A=1010、B=1011
C=1100、D=1101、E=1110、F=1111
截圖
程式碼
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class _2_to_16 { // 顯示全型數字 public static String quan_xing(String s) { s = s.replace("0", "0");// 如果字串內有半型的0,則變成全型的0 s = s.replace("1", "1"); s = s.replace("2", "2"); s = s.replace("3", "3"); s = s.replace("4", "4"); s = s.replace("5", "5"); s = s.replace("6", "6"); s = s.replace("7", "7"); s = s.replace("8", "8"); s = s.replace("9", "9"); s = s.replace("A", "A"); s = s.replace("B", "B"); s = s.replace("C", "C"); s = s.replace("D", "D"); s = s.replace("E", "E"); s = s.replace("F", "F"); return s; } public static void main(String[] args) throws IOException { BufferedReader sc = new BufferedReader( new InputStreamReader(System.in));// 從鍵盤讀取文字 System.out.println("2進位→16進位\n//-----------------------"); System.out.print("輸入要轉換的數字:"); boolean cuo = false;// 判斷是否有錯誤 String cuo_zi = ""; String shu_ru = sc.readLine().toUpperCase();// 輸入的值 int chang = shu_ru.length();// 字串長度 String in = "";// 儲存【最後印出結果】 String[] xian = new String[chang];// 計算用 String sum = "";// 顯示【答案】 String[] s16 = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" }; String[] s2 = { "0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111" }; for (int i = 0; i < 400; i = i + 4) {// 補0 if (i >= chang) { if (i - chang == 0) { } else if (i - chang == 1) { shu_ru = "0" + shu_ru; } else if (i - chang == 2) { shu_ru = "00" + shu_ru; } else if (i - chang == 3) { shu_ru = "000" + shu_ru; } break;// 脫離 } } in += ("2進位:" + shu_ru + " → 16進位" + "\n\n");// 印出 標題 chang = shu_ru.length();// 重新取得 字串長度 for (int i = 0; i < chang / 4; i++) {// 印出個別2進位的符號(定位) xian[i] = shu_ru.substring(i * 4, i * 4 + 4); in += " " + quan_xing(xian[i]); } in += "\n";// 換行 for (int i = 0; i < chang / 4; i++) { for (int j = 0; j < s2.length; j++) { if (xian[i].equals(s2[j])) {// 印出計算結果 in += " └─" + quan_xing(s16[j]) + "┘"; sum += s16[j];// 儲存答案 } } // 判斷是否有錯字 if (!(xian[i].equals("0000") || xian[i].equals("0001") || xian[i].equals("0010") || xian[i].equals("0011") || xian[i].equals("0100") || xian[i].equals("0101") || xian[i].equals("0110") || xian[i].equals("0111") || xian[i].equals("1000") || xian[i].equals("1001") || xian[i].equals("1010") || xian[i].equals("1011") || xian[i].equals("1100") || xian[i].equals("1101") || xian[i].equals("1110") || xian[i].equals("1111"))) { cuo = true; cuo_zi += xian[i];// 錯字 } } if (cuo == true) {// 如果有錯字 in = ("檢視結果:\n有異音的字: 【" + cuo_zi + "】"); } in += "\n\n答案: " + sum; System.out.println(in);// 顯示結果 System.gc();// 釋放記憶體 } } |