Java

Java ASCII

승모근뭉치 2023. 1. 20. 23:24

프로젝트 내 src 내 javabasic 패키지 내 Ex10DataType.java

package javabasic;

public class Ex10DataType {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char c1 = 'A';// 문자
		char c2 = 65;// 10진
		char c3 = 0x41;// 16진
		char c4 = 0101;// 8진

		System.out.println(c1);
		System.out.println(c2);
		System.out.println(c3);
		System.out.println(c4);

		char a1 = 'x';
		char a2 = 120;
		char a3 = 0x78;
		char a4 = 0170;

		System.out.println(a1);
		System.out.println(a2);
		System.out.println(a3);
		System.out.println(a4);

		char b1 = 'E';
		char b2 = 69;
		char b3 = 0x45;
		char b4 = 0105;

		System.out.println(b1);
		System.out.println(b2);
		System.out.println(b3);
		System.out.println(b4);
	}

}
A
A
A
A
x
x
x
x
E
E
E
E

이해가 안돼서 찾는데 시간이 좀 걸렸다.

10진수(decimal)를 ASCII로,

16진수(hexadecimal)를 ASCII로,

8진수(octal)를 ASCII로 변환하는 것이다.

 

16진수는 숫자 앞에 0x 를 붙인다.

위에서 보면 변수 c4에는 8진수를 대입해 줄 것인데

십진수 65을 8진수로 나타내려면

65를 8로 계속 나눠줘야 한다.

그런데 나는 65를 8로 나눌 때 몫이 0 이 될 때가지 안나누고

몫이 1 이 될 때 까지만 나눈 걸 생각했다.

0101 을 보면 (1 * 8^0) + (0 * 8^1) + (1 * 8^2) = 1 + 0 + 64 = 65 가 나와서 101 이 맞는 거 아닌가 생각해서

char c4 = 0101; 대신에 char c4 = 101;

로 고쳐서 Run 했더니

101 십진수라 소문자 e 가 출력되엇다.

복잡하니 8진수는 숫자 앞에 0 을 붙여준다고 생각하자.

참고로, 2진수는 숫자 앞에 0B 나 0b 를 붙여준다고 한다..

 

다음은 ASCII table 이다.

ASCII TABLE