컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 10진법, 2진법, 8진법, 16진법이다.
다음은 0 에서 15 까지의 정수를 10진법, 2진법, 8진법, 16진법의 표로 만들어 보여주는 Python 소스 코드이다. 진법 변환에 필요한 함수
convertAtoI(string, radix)
convertItoA(number, radix)
를 Python 코드로 자체 작성하여 사용하였다.
(아래의 소스는 Jython이나 IronPython에서도 수정없이 그대로 실행된다.)
- # Filename: makeRadixTable.py
- # Show the radix table with 10-, 2-, 8-, 16-radices.
- #
- # Execute: python makeRadixTable.py
- #
- # Date: 2008/03/28
- # Author: PH Kim [ pkim (AT) scripts.pe.kr ]
- import sys
- BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- def println(s=None):
- if s == None:
- else:
- print(s)
- def printUsage():
- println("Usage: python makeRadixTable.py")
- println("Show the radix table with 10-, 2-, 8-, 16-radices.")
- def convertItoA(num, radix):
- isNegative = False
- if num < 0:
- isNegative = True
- num = -num
- arr = ""
- q = num
- r = 0
- while q >= radix:
- r = q % radix
- q = q / radix
- arr += BASE36[r]
- arr += BASE36[q]
- if isNegative:
- arr += "-"
- n = len(arr)
- ret = ""
- for i in range(0, n):
- ret += arr[n - i - 1]
- return ret
- def convertAtoI(srcStr, radix):
- isNegative = False
- ret = 0
- m = len(srcStr)
- val = 0
- c = srcStr[0]
- if c == '-':
- isNegative = True
- elif c >= '0' and c <= '9':
- ret = ord(c) - ord('0')
- elif c >= 'A' and c <= 'Z':
- ret = (ord(c) - ord('A')) + 10
- elif c >= 'a' and c <= 'z':
- ret = (ord(c) - ord('a')) + 10
- if ret >= radix:
- println(" Invalid character!")
- return ret
- for i in range(1, m):
- c = srcStr[i]
- ret *= radix
- if c >= '0' and c <= '9':
- val = ord(c) - ord('0')
- elif c >= 'A' and c <= 'Z':
- val = (ord(c) - ord('A')) + 10
- elif c >= 'a' and c <= 'z':
- val = (ord(c) - ord('a')) + 10
- if val >= radix:
- println(" Invalid character!")
- return ret
- ret += val
- return ret
- def makeTable():
- sbuf = ""
- abuf = ""
- tbuf = ""
- for i in range(0, 4):
- sbuf += "+-------"
- sbuf += "+"
- println(sbuf)
- sbuf = "| Dec"
- sbuf += "\t| Bin"
- sbuf += "\t| Oct"
- sbuf += "\t| Hex |"
- println(sbuf)
- sbuf = ""
- for i in range(0, 4):
- sbuf += "+-------"
- sbuf += "+"
- println(sbuf)
- for i in range(0, 16):
- sbuf = "| %2d" % i
- abuf = convertItoA(i, 2)
- tbuf = "\t| %4s" % abuf
- sbuf += tbuf
- abuf = convertItoA(i, 8)
- tbuf = "\t| %2s" % abuf
- sbuf += tbuf
- abuf = convertItoA(i, 16)
- tbuf = "\t| %-2s |" % abuf
- sbuf += tbuf
- println(sbuf)
- sbuf = ""
- for i in range(0, 4):
- sbuf += "+-------"
- sbuf += "+"
- println(sbuf)
- if len(sys.argv) > 1 and "-h" == sys.argv[1]:
- printUsage()
- sys.exit(1)
- makeTable()
실행> python makeRadixTable.py
+-------+-------+-------+-------+ | 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 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Python' 카테고리의 다른 글
Python에서 공백 문자 없이 연속적으로 출력하려면 (0) | 2008.04.04 |
---|---|
7비트 ASCII 코드표 만들기 예제 with Python (or Jython or IronPython) (0) | 2008.03.31 |
대화형 모드의 진법(radix) 변환 예제 with Python (0) | 2008.03.28 |
황금비율(golden ratio) 구하기 with Python or Jython (0) | 2008.03.24 |
현재 시각 알아내기 for Python, Jython, and IronPython (0) | 2008.03.24 |