컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 10진법, 2진법, 8진법, 16진법이다.
다음은  0부터 15까지의 정수를 10진법, 2진법, 8진법, 16진법의 표로 만들어 보여주는 자바 소스 코드이다. 진법 변환에 필요한 메소드로는 자바에

         Integer.parseInt(String, int radix);
         Long.toString(long, int radix);

가 이미 있지만, 여기에 준하는 메소드

        convertAtoI(String, radix)
        convertItoA(long, radix)

를 자체 작성하여 사용하였다.



  1. /*
  2.  *  Filename: MakeRadixTableApp.java
  3.  *            Show the radix table with 10-, 2-, 8-, 16-radices.
  4.  *
  5.  *  Compile: javac -d . MakeRadixTableApp.java
  6.  *  Execute: java MakeRadixTableApp
  7.  *
  8.  *      Date:  2008/03/27
  9.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  10.  */
  11. public class MakeRadixTableApp {
  12.     static void println(String s) {
  13.         System.out.println(s);
  14.     }
  15.     static void print(String s) {
  16.         System.out.print(s);
  17.     }
  18.     static void printUsage() {
  19.         println("Usage: java MakeRadixTableApp");
  20.         println("Show the radix table with 10-, 2-, 8-, 16-radices.");
  21.     }
  22.     static String BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  23.     public static String convertItoA(long num, int radix) {
  24.         long q, r;
  25.         boolean isNegative = false;
  26.         if (num < 0L) {
  27.             isNegative = true;
  28.             num = -num;
  29.         }
  30.         String arr = "";
  31.         q = num;
  32.         r = 0L;
  33.         while (q >= (long) radix) {
  34.             r = q % (long) radix;
  35.             q = q / (long) radix;
  36.             arr += BASE36.charAt((int) r);
  37.         }
  38.         arr += BASE36.charAt((int) q);
  39.         if (isNegative) {
  40.              arr += "-";
  41.         }
  42.         int n = arr.length();
  43.         String ret = "";
  44.         for (int i = 0; i < n; i++) {
  45.             ret += arr.charAt(n - i - 1);
  46.         }
  47.         return ret;
  48.     }
  49.     public static long convertAtoI(String srcStr, int radix) {
  50.         boolean isNegative = false;
  51.         long ret = 0L;
  52.         int len = srcStr.length();
  53.         char c;
  54.         int i;
  55.         long val = 0L;
  56.         c = srcStr.charAt(0);
  57.         if (c == '-') {
  58.            isNegative = true;
  59.         }
  60.         else if (c >= '0' && c <= '9') {
  61.             ret = (long) (c - '0');
  62.         }
  63.         else if (c >= 'A' && c <= 'Z') {
  64.             ret = (long) (c - 'A') + 10L;
  65.         }
  66.         else if (c >= 'a' && c <= 'z') {
  67.             ret = (long) (c - 'a') + 10L;
  68.         }
  69.         if (ret >= (long) radix) {
  70.             println("        Invalid character!");
  71.             return ret;
  72.         }
  73.         for (i = 1; i < len; i++) {
  74.             c = srcStr.charAt(i);
  75.             ret *= radix;
  76.             if (c >= '0' && c <= '9') {
  77.                 val = (long) (c - '0');
  78.             }
  79.             else if (c >= 'A' && c <= 'Z') {
  80.                 val = (long) (c - 'A') + 10L;
  81.             }
  82.             else if (c >= 'a' && c <= 'z') {
  83.                 val = (long) (c - 'a') + 10L;
  84.             }
  85.             if (val >= (long) radix) {
  86.                 println("        Invalid character!");
  87.                 return ret;
  88.             }
  89.             ret += val;
  90.         }
  91.         return ret;
  92.     }
  93.     public static void makeTable() {
  94.         String sbuf = "";
  95.         String abuf = "";
  96.         String tbuf = "";
  97.         int i, j;
  98.         char c;
  99.         for (i = 0; i < 4; i++) {
  100.             print("+-------");
  101.         }
  102.         print("+");
  103.         println("");
  104.         print("|  Dec");
  105.         print("\t|   Bin");
  106.         print("\t|  Oct");
  107.         print("\t|  Hex  |");
  108.         println("");
  109.         for (i = 0; i < 4; i++) {
  110.             print("+-------");
  111.         }
  112.         print("+");
  113.         println("");
  114.         for (i = 0; i < 16; i++) {
  115.             sbuf = String.format("|   %2d", i);
  116.             abuf = convertItoA((long) i, 2);
  117.             tbuf = String.format("\t|  %4s", abuf);
  118.             sbuf += tbuf;
  119.             abuf = convertItoA((long) i, 8);
  120.             tbuf = String.format("\t|   %2s", abuf);
  121.             sbuf += tbuf;
  122.             abuf = convertItoA((long) i, 16);
  123.             tbuf = String.format("\t|    %-2s |", abuf);
  124.             sbuf += tbuf;
  125.             println(sbuf);
  126.         }
  127.         for (i = 0; i < 4; i++) {
  128.             print("+-------");
  129.         }
  130.         print("+");
  131.         println("");
  132.     }
  133.     public static void main(String[] args) {
  134.         if (args.length > 0 && "-h".equals(args[0])) {
  135.             printUsage();
  136.             System.exit(1);
  137.         }
  138.         makeTable();
  139.     }
  140. }



컴파일> javac -d . MakeRadixTableApp.java

실행> java MakeRadixTableApp

+-------+-------+-------+-------+
|  Dec  |   Bin |  Oct  |  Hex  |
+-------+-------+-------+-------+
|    0  |     0 |    0  |    0  |
|    1  |     1 |    1  |    1  |
|    2  |    10 |    2  |    2  |
|    3  |    11 |    3  |    3  |
|    4  |   100 |    4  |    4  |
|    5  |   101 |    5  |    5  |
|    6  |   110 |    6  |    6  |
|    7  |   111 |    7  |    7  |
|    8  |  1000 |   10  |    8  |
|    9  |  1001 |   11  |    9  |
|   10  |  1010 |   12  |    A  |
|   11  |  1011 |   13  |    B  |
|   12  |  1100 |   14  |    C  |
|   13  |  1101 |   15  |    D  |
|   14  |  1110 |   16  |    E  |
|   15  |  1111 |   17  |    F  |
+-------+-------+-------+-------+




Creative Commons License

이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Posted by Scripter
,