컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 10진법, 2진법, 8진법, 16진법이다.
다음은 0부터 15까지의 정수를 10진법, 2진법, 8진법, 16진법의 표로 만들어 보여주는 C# 소스 코드이다. 진법 변환에 필요한 C# 메소드로
Convert.Int64(string str, int radix);
가 이미 있지만, 여기에서는 아예 변환 메소드
convertAtoI(string, radix)
convertItoA(long, radix)
를 자체 구현하여 사용하였다.
- /*
- * Filename: MakeRadixTableApp.cs
- * Show the radix table with 10-, 2-, 8-, 16-radices.
- *
- * Compile: csc MakeRadixTableApp.cs
- * Execute: MakeRadixTableApp
- *
- * Date: 2009/01/19
- * Author: PH Kim [ pkim (AT) scripts.pe.kr ]
- */
- using System;
- namespace MyTestApplication1 {
- public class MakeRadixTableApp {
- static void println(String s) {
- Console.WriteLine(s);
- }
- static void print(String s) {
- Console.Write(s);
- }
- static void PrintUsage() {
- println("Usage: MakeRadixTableApp");
- println("Show the radix table with 10-, 2-, 8-, 16-radices.");
- }
- static string BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- public static string ConvertItoA(long num, int radix) {
- string tmp;
- string ret;
- string arr;
- long q, r;
- bool isNegative = false;
- if (num < 0L) {
- isNegative = true;
- num = -num;
- }
- arr = "";
- q = num;
- r = 0L;
- while (q >= (long) radix) {
- r = q % (long) radix;
- q = q / (long) radix;
- tmp = BASE36.Substring((int)r, 1);
- arr += tmp;
- }
- tmp = BASE36.Substring((int)q, 1);
- arr += tmp;
- if (isNegative) {
- arr += "-";
- }
- ret = "";
- for (int j = 0; j < arr.Length; j++) {
- ret += arr.Substring(arr.Length - j - 1, 1);
- }
- return ret;
- }
- public static long ConvertAtoI(string s, int radix) {
- long ret = 0L;
- bool isNegative = false;
- int len =s.Length;
- char c;
- int i;
- long val = 0L;
- c = s[0];
- if (c == '-') {
- isNegative = true;
- }
- else if (c >= '0' && c <= '9') {
- ret = (long) (c - '0');
- }
- else if (c >= 'A' && c <= 'Z') {
- ret = (long) (c - 'A') + 10L;
- }
- else if (c >= 'a' && c <= 'z') {
- ret = (long) (c - 'a') + 10L;
- }
- if (ret >= (long) radix) {
- Console.WriteLine(" Invalid character!");
- return ret;
- }
- for (i = 1; i < len; i++) {
- c = s[i];
- ret *= radix;
- if (c >= '0' && c <= '9') {
- val = (long) (c - '0');
- }
- else if (c >= 'A' && c <= 'Z') {
- val = (long) (c - 'A') + 10L;
- }
- else if (c >= 'a' && c <= 'z') {
- val = (long) (c - 'a') + 10L;
- }
- if (val >= (long) radix) {
- Console.WriteLine(" Invalid character!");
- return ret;
- }
- ret += val;
- }
- if (isNegative)
- ret = -ret;
- return ret;
- }
- public static void MakeTable() {
- string sbuf = "";
- string abuf = "";
- string tbuf = "";
- int i;
- for (i = 0; i < 4; i++) {
- print("+-------");
- }
- print("+");
- println("");
- print("| Dec");
- print("\t| Bin");
- print("\t| Oct");
- print("\t| Hex |");
- println("");
- for (i = 0; i < 4; i++) {
- print("+-------");
- }
- print("+");
- println("");
- for (i = 0; i < 16; i++) {
- sbuf = String.Format("| {0, 2}", i);
- abuf = ConvertItoA((long) i, 2);
- tbuf = String.Format("\t| {0, 4}", abuf);
- sbuf += tbuf;
- abuf = ConvertItoA((long) i, 8);
- tbuf = String.Format("\t| {0, 2}", abuf);
- sbuf += tbuf;
- abuf = ConvertItoA((long) i, 16);
- tbuf = String.Format("\t| {0, -2} |", abuf);
- sbuf += tbuf;
- println(sbuf);
- }
- for (i = 0; i < 4; i++) {
- print("+-------");
- }
- print("+");
- println("");
- }
- // Java 언어의 main 메소드에 해당하는 C# 언어의 Main 메소드
- public static void Main(string[] args) {
- if (args.Length > 0 && "-h".Equals(args[0])) {
- PrintUsage();
- Environment.Exit(1);
- }
- MakeTable();
- }
- }
- }
컴파일> 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 | +-------+-------+-------+-------+
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > C#' 카테고리의 다른 글
삼각형 출력 예제를 통한 여러 가지 소스 비교 with C# (0) | 2009.01.24 |
---|---|
7비트 ASCII 코드표 만들기 예제 with C# (0) | 2009.01.19 |
대화형 모드의 진법(radix) 변환 예제 with C# (0) | 2009.01.16 |
황금비율(golden ratio) 구하기 with C# (0) | 2009.01.16 |
현재 시각 알아내기 for C# (0) | 2009.01.16 |