컴퓨터 프로그래밍에서 꼭 알아두어야 할 주요 진법은 당연히 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)
를 자체 작성하여 사용하였다.
- /*
- * Filename: MakeRadixTableApp.java
- * Show the radix table with 10-, 2-, 8-, 16-radices.
- *
- * Compile: javac -d . MakeRadixTableApp.java
- * Execute: java MakeRadixTableApp
- *
- * Date: 2008/03/27
- * Author: PH Kim [ pkim (AT) scripts.pe.kr ]
- */
- public class MakeRadixTableApp {
- static void println(String s) {
- System.out.println(s);
- }
- static void print(String s) {
- System.out.print(s);
- }
- static void printUsage() {
- println("Usage: java MakeRadixTableApp");
- println("Show the radix table with 10-, 2-, 8-, 16-radices.");
- }
- static String BASE36 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
- public static String convertItoA(long num, int radix) {
- long q, r;
- boolean isNegative = false;
- if (num < 0L) {
- isNegative = true;
- num = -num;
- }
- String arr = "";
- q = num;
- r = 0L;
- while (q >= (long) radix) {
- r = q % (long) radix;
- q = q / (long) radix;
- arr += BASE36.charAt((int) r);
- }
- arr += BASE36.charAt((int) q);
- if (isNegative) {
- arr += "-";
- }
- int n = arr.length();
- String ret = "";
- for (int i = 0; i < n; i++) {
- ret += arr.charAt(n - i - 1);
- }
- return ret;
- }
- public static long convertAtoI(String srcStr, int radix) {
- boolean isNegative = false;
- long ret = 0L;
- int len = srcStr.length();
- char c;
- int i;
- long val = 0L;
- c = srcStr.charAt(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) {
- println(" Invalid character!");
- return ret;
- }
- for (i = 1; i < len; i++) {
- c = srcStr.charAt(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) {
- println(" Invalid character!");
- return ret;
- }
- ret += val;
- }
- return ret;
- }
- public static void makeTable() {
- String sbuf = "";
- String abuf = "";
- String tbuf = "";
- int i, j;
- char c;
- 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("| %2d", i);
- abuf = convertItoA((long) i, 2);
- tbuf = String.format("\t| %4s", abuf);
- sbuf += tbuf;
- abuf = convertItoA((long) i, 8);
- tbuf = String.format("\t| %2s", abuf);
- sbuf += tbuf;
- abuf = convertItoA((long) i, 16);
- tbuf = String.format("\t| %-2s |", abuf);
- sbuf += tbuf;
- println(sbuf);
- }
- for (i = 0; i < 4; i++) {
- print("+-------");
- }
- print("+");
- println("");
- }
- public static void main(String[] args) {
- if (args.length > 0 && "-h".equals(args[0])) {
- printUsage();
- System.exit(1);
- }
- makeTable();
- }
- }
컴파일> 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 | +-------+-------+-------+-------+
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
'프로그래밍 > Java' 카테고리의 다른 글
삼각형 출력 예제를 통한 여러 가지 소스 비교 with Java (0) | 2008.04.02 |
---|---|
7비트 ASCII 코드표 만들기 예제 with Java (0) | 2008.03.30 |
대화형 모드의 진법(radix) 변환 예제 with Java (0) | 2008.03.28 |
황금비율(golden ratio) 구하기 with Java (0) | 2008.03.24 |
현재 시각 알아내기 for Java (0) | 2008.03.24 |