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

        convertAtoI(string, radix)
        convertItoA(int64, radix)

를 Go 언어 코드로 자체 작성하여 사용하였다.


  1. /*
  2.  *  Filename: makeRadixTable.go
  3.  *            Show the radix table with 10-, 2-, 8-, 16-radices.
  4.  *
  5.  *  Execute: go run makeRadixTable.go
  6.  *
  7.  *  or
  8.  *
  9.  *  Compile: go build makeRadixTable.go
  10.  *  Execute: ./makeRadixTable
  11.  *
  12.  *      Date:  2012/06/25
  13.  *    Author:  PH Kim   [ pkim (AT) scripts.pe.kr ]
  14.  */
  15. package main
  16. import (
  17.     "fmt"
  18.     "os"
  19. )   
  20. type _TOKEN struct {
  21.     a string
  22.     b string
  23. }
  24. func println(s string) {
  25.     fmt.Printf("%s\n", s)
  26. }
  27. func print(s string) {
  28.     fmt.Printf("%s", s)
  29. }
  30. func printUsage() {
  31.     println("Usage: makeRadixTable")
  32.     println("Show the radix table with 10-, 2-, 8-, 16-radices.")
  33. }
  34. func convertItoA(num int64, radix int) (ret string) {
  35.     var BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  36.     var tmp string
  37.     var arr string
  38.     var q, r int64
  39.     var i, n int
  40.     var isNegative bool = false
  41.     if num < 0 {
  42.         isNegative = true
  43.         num = -num
  44.     }
  45.     arr = ""
  46.     q = num
  47.     r = 0
  48.     for q >= int64(radix) {
  49.         r = q % int64(radix)
  50.         q = q / int64(radix)
  51.         tmp = BASE36[r:r+1]
  52.         arr += tmp
  53.     }
  54.     tmp = BASE36[q:q+1]
  55.     arr += tmp
  56.     if isNegative {
  57.         arr += "-"
  58.     }
  59.     n = len(arr)
  60.     for i = 0; i < n; i++ {
  61.         ret += arr[n - i - 1:n-i]
  62.     }
  63.     return ret
  64. }
  65. func convertAtoI(str string, radix int) (ret int64) { 
  66.     var isNegative bool = false
  67.     var len int = len(str)
  68.     var c byte
  69.     var i int
  70.     var val int64
  71.     c = str[0]
  72.     if c == '-' {
  73.         isNegative = true
  74.     } else if c >= '0' && c <= '9' {
  75.         ret = int64(c) - int64('0');
  76.     } else if c >= 'A' && c <= 'Z' {
  77.         ret = int64(c - 'A') + 10
  78.     } else if c >= 'a' && c <= 'z' {
  79.         ret = int64(c - 'a') + 10;
  80.     }
  81.     if ret >= int64(radix) {
  82.         println("        Invalid character!")
  83.         return ret
  84.     }
  85.     for i = 1; i < len; i++ {
  86.         c = str[i]
  87.         ret *= int64(radix)
  88.         if c >= '0' && c <= '9' {
  89.             val = int64(c - '0')
  90.         } else if c >= 'A' && c <= 'Z' {
  91.             val = int64(c - 'A') + 10
  92.         } else if c >= 'a' && c <= 'z' {
  93.             val = int64(c - 'a') + 10
  94.         }
  95.         if val >= int64(radix) {
  96.             println("        Invalid character!")
  97.             return ret
  98.         }
  99.         ret += val
  100.     }
  101.     if isNegative {
  102.         ret = -ret
  103.     }
  104.     return ret
  105. }
  106. func makeTable() {
  107.     var sbuf, abuf, tbuf string
  108.     var i int
  109.     for i = 0; i < 4; i++ {
  110.         print("+-------")
  111.     }
  112.     print("+")
  113.     println("")
  114.     print("|  Dec")
  115.     print("\t|   Bin")
  116.     print("\t|  Oct")
  117.     print("\t|  Hex  |")
  118.     println("")
  119.     for i = 0; i < 4; i++ {
  120.         print("+-------")
  121.     }
  122.     print("+")
  123.     println("")
  124.     for i = 0; i < 16; i++ {
  125.         sbuf = fmt.Sprintf("|   %2d", i)
  126.         abuf = convertItoA(int64(i), 2)
  127.         tbuf = fmt.Sprintf("\t|  %4s", abuf)
  128.         sbuf += tbuf
  129.         abuf = convertItoA(int64(i), 8)
  130.         tbuf = fmt.Sprintf("\t|   %2s", abuf)
  131.         sbuf += tbuf
  132.         abuf = convertItoA(int64(i), 16)
  133.         tbuf = fmt.Sprintf("\t|    %-2s |", abuf)
  134.         sbuf += tbuf
  135.         println(sbuf)
  136.     }
  137.     for i = 0; i < 4; i++ {
  138.         print("+-------");
  139.     }
  140.     print("+")
  141.     println("")
  142. }
  143. func main() {
  144.     if len(os.Args) > 1 &&  os.Args[1] == "-h" {
  145.         printUsage()
  146.         os.Exit(1)
  147.     }
  148.     makeTable()
  149. }



실행> go run akeRadixTable.go

컴파일> go build makeRadixTable.go

실행> ./makeRadixTable

+-------+-------+-------+-------+
|  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  |
+-------+-------+-------+-------+



 

Posted by Scripter
,