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

         Convert.Int64(string str,  int radix);

가 이미 있지만, 여기에서는 아예 변환 메소드

        convertAtoI(string, radix)
        convertItoA(long, radix)

를 자체 구현하여 사용하였다.



  1. /*
  2.  *  Filename: MakeRadixTableApp.cs
  3.  *            Show the radix table with 10-, 2-, 8-, 16-radices.
  4.  *
  5.  *  Compile: csc MakeRadixTableApp.cs
  6.  *  Execute: MakeRadixTableApp
  7.  *
  8.  *      Date:  2009/01/19
  9.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  10.  */
  11. using System;
  12. namespace MyTestApplication1 {
  13.     public class MakeRadixTableApp {
  14.         static void println(String s) {
  15.             Console.WriteLine(s);
  16.         }
  17.         static void print(String s) {
  18.             Console.Write(s);
  19.         }
  20.         static void PrintUsage() {
  21.             println("Usage: MakeRadixTableApp");
  22.             println("Show the radix table with 10-, 2-, 8-, 16-radices.");
  23.         }
  24.         static string BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  25.         public static string ConvertItoA(long num, int radix) {
  26.             string tmp;
  27.             string ret;
  28.             string arr;
  29.             long q, r;
  30.             bool isNegative = false;
  31.             if (num < 0L) {
  32.                 isNegative = true;
  33.                 num = -num;
  34.             }
  35.             arr = "";
  36.             q = num;
  37.             r = 0L;
  38.             while (q >= (long) radix) {
  39.                 r = q % (long) radix;
  40.                 q = q / (long) radix;
  41.                 tmp = BASE36.Substring((int)r, 1);
  42.                 arr += tmp;
  43.             }
  44.             tmp = BASE36.Substring((int)q, 1);
  45.             arr += tmp;
  46.             if (isNegative) {
  47.                 arr += "-";
  48.              }
  49.              ret = "";
  50.              for (int j = 0; j < arr.Length; j++) {
  51.                ret += arr.Substring(arr.Length - j - 1, 1);
  52.              }
  53.              return ret;
  54.         }
  55.         public static long ConvertAtoI(string s, int radix) {
  56.             long ret = 0L;
  57.             bool isNegative = false;
  58.             int len =s.Length;
  59.             char c;
  60.             int i;
  61.             long val = 0L;
  62.             c = s[0];
  63.             if (c == '-') {
  64.                 isNegative = true;
  65.             }
  66.             else if (c >= '0' && c <= '9') {
  67.                 ret = (long) (c - '0');
  68.             }
  69.             else if (c >= 'A' && c <= 'Z') {
  70.                 ret = (long) (c - 'A') + 10L;
  71.             }
  72.             else if (c >= 'a' && c <= 'z') {
  73.                 ret = (long) (c - 'a') + 10L;
  74.             }
  75.             if (ret >= (long) radix) {
  76.                 Console.WriteLine("        Invalid character!");
  77.                 return ret;
  78.             }
  79.             for (i = 1; i < len; i++) {
  80.                 c = s[i];
  81.                 ret *= radix;
  82.                 if (c >= '0' && c <= '9') {
  83.                     val = (long) (c - '0');
  84.                 }
  85.                 else if (c >= 'A' && c <= 'Z') {
  86.                     val = (long) (c - 'A') + 10L;
  87.                 }
  88.                 else if (c >= 'a' && c <= 'z') {
  89.                     val = (long) (c - 'a') + 10L;
  90.                 }
  91.                 if (val >= (long) radix) {
  92.                     Console.WriteLine("        Invalid character!");
  93.                     return ret;
  94.                 }
  95.                 ret += val;
  96.             }
  97.             if (isNegative)
  98.                 ret = -ret;
  99.             return ret;
  100.         }
  101.         public static void MakeTable() {
  102.             string sbuf = "";
  103.             string abuf = "";
  104.             string tbuf = "";
  105.             int i;
  106.             for (i = 0; i < 4; i++) {
  107.                 print("+-------");
  108.             }
  109.             print("+");
  110.             println("");
  111.             print("|  Dec");
  112.             print("\t|   Bin");
  113.             print("\t|  Oct");
  114.             print("\t|  Hex  |");
  115.             println("");
  116.             for (i = 0; i < 4; i++) {
  117.                 print("+-------");
  118.             }
  119.             print("+");
  120.             println("");
  121.             for (i = 0; i < 16; i++) {
  122.                 sbuf = String.Format("|   {0, 2}", i);
  123.                 abuf = ConvertItoA((long) i, 2);
  124.                 tbuf = String.Format("\t|  {0, 4}", abuf);
  125.                 sbuf += tbuf;
  126.                 abuf = ConvertItoA((long) i, 8);
  127.                 tbuf = String.Format("\t|   {0, 2}", abuf);
  128.                 sbuf += tbuf;
  129.                 abuf = ConvertItoA((long) i, 16);
  130.                 tbuf = String.Format("\t|    {0, -2} |", abuf);
  131.                 sbuf += tbuf;
  132.                 println(sbuf);
  133.             }
  134.             for (i = 0; i < 4; i++) {
  135.                 print("+-------");
  136.             }
  137.             print("+");
  138.             println("");
  139.         }
  140.         // Java 언어의 main 메소드에 해당하는 C# 언어의 Main 메소드
  141.         public static void Main(string[] args) {
  142.             if (args.Length > 0 && "-h".Equals(args[0])) {
  143.                 PrintUsage();
  144.                 Environment.Exit(1);
  145.             }
  146.             MakeTable();
  147.         }
  148.     }
  149. }



컴파일> csc MakeRadixTableApp.cs

실행> 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
,