본문 바로가기

개발 일기/Java Programming

데이터 형식과 배열 | 비트 | 진수 | 바이트 | 진수 변환 | 정수의 연산 | 아스키코드(ASCII) | 유니코드 | 불(Boole) | boolean | String 문자열

데이터 형식과 배열

 

1. 비트

컴퓨터에서 저장할 수 있는 최소 단위

a. 0(OFF)과 1(ON)만 존재

의미 2진수 10진수
꺼짐, 꺼짐 00 0
꺼짐, 켜짐 01 1
켜짐, 꺼짐 10 2
켜짐, 켜짐 11 3

b. n개의 전기 스위치로 표현할 수 있는 가짓 수 = 2ⁿ

c. 3비트로 표현할 수 있는 가짓수는 2³=8개, 4비트로 표현할 수 있는 가짓수는 2⁴=16개 

 

정보(인간이 보이는 언어)

-> 입력 (키보드)

--변환(0,1)-> 처리(주기억장치,cpu_순차적으로)

-> 출력(모니터(다시 인간이 하는 언어))

 

2. 진수

10진수(0~9) 2진수(0,1) 16진수(0~F)
00 0000 0
01 0001 (1) 1
02 0010 (2) 2
03 0011 (2,1) 3
04 0100 (4) 4
05 0101 (4,1) 5
06 0110 (4, 2) 6
07 0111 (4, 2, 1) 7
08 1000 (8) 8
09 1001 (8, 1) 9
10 1010 (8, 2) A (10이면 10진수랑 혼동하기 때문에 구분)
11 1011 (8, 2, 1) B
12 1100 (8, 4) C
13 1101 (8, 4, 1) D
14 1110 (8, 4, 2) E
15 1111 (8, 4, 2, 1) F

8진수도 사용할 수 있지만, 활용도가 비교적 낮음

 

3. 바이트

a. JAVA에서 가장 많이 사용하는 단위

    바이트는 8개의 비트가 합쳐진 것

비트 수 바이트 수  표현 개수 2진수 10진수 16진수
1   2¹=2 0~1 0~1 0~1
2   2²=4 0~11 0~3 0~3
4   2⁴=16 0~1111 0~15 0~F
8 1 28=256 0~11111111 0~255 0~FF
16 2 216=65536 0~11111111 11111111 0~65535 0~FFFF
32 4 232=약 42억 0~... 0~약 42억 0~FFFF FFFF
64 8 264=약 1800경 0~... 0~약 1800경 0~...

2<sup>8</sup> 2의8승

 

b. 2진수를 10진수로 변환하는 방법

2진수 1 0 0 1   0 0 1 1
X X X X   X X X X
27 26 25 24   23 22 21 20
= = = =   = = = =
128 0 0 16   0 0 2 1
+
10진수 147

c. 2진수를 16진수로 변환한 후 10진수로 변환하는 방법

2진수 1   0   0   1   0   0   1   1
X   X   X   X X   X   X   X
      20       20
=   =   =   = =   =   =   =
8 + 0 + 0 + 1 0 + 0 + 2 + 1
16진수 9 3
X X
16¹ 160
= =
144 3
+
10수 147

 

4. 2진수 변환 연습

a. 10진수를 2진수로 변환

b. 16진수와 2진수 변환표

16진수 2진수 16진수 2진수
0 0000 8 1000
1 0001 9 1001
2 0010 A 1010
3 0011 B 1011
4 0100 C 1100
5 0101 D 1101
6 0110 E 1110
7 1111 F 1111

c. 16진수를 2진수로 변환하기

 

5. 소수점이 없는 정수형

정수형 데이터 형식 의미 크기 값의 범위
byte 아주 작은 정수형 1바이트 -27(-128)~27-1(127)
short 작은 정수형 2바이트 -215(-32768)~215-1(32767)
int 정수형 4바이트 -231(약 -21억)~231-1 (약 21억)
long 큰 정수형 8바이트 -263 (약 -900경)~263-1 (약 900경)

a. JAVA는 정수형 중에서 int형을 기본 정수형으로 취급한다.

public class EX03_09 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = 100, b = 200; //정수형 변수 a와 b에 값을 지정
		float result; //실수형 변수 result를 선언
		
		result = a / b; //a를 b로 나눈 다음 결과를 실수형 변수 result에 대입(0.5를 예상)
		
		System.out.printf("%f \n", result); //printf에서 f는 서식지정(형식지정자)
	}

}

0.000000

|커서는 여기에

 

b. 정수의 연산 결과

100 (정수형 변수 a) / 200 정수형 변수 b) -> 0 / 정수끼리의 연산이므로 결과가 정수

실수형 변수 result에 0.0 계산 결과 대입

정수 +, -, *, / 정수 = 정수
정수 +, -, *, / 실수 = 실수
실수 +, -, *, / 실수 = 실수

 

6. 소수점이 있는 실수형

실수형 데이터 형식 의미 크기 값의 범위
float 실수형 4바이트 약 -3.4X10의38승~3.4X10의38승
double 큰 실수형 8바이트 약 -1.79X10308~1.79X10308

 

a. JAVA는 실수형 중에서 double형을 기본 실수형으로 취급한다. 그래서 3.14라고 쓰면 double형 값으로 인식하고, 이 값을 float형으로 만들려면 숫자 뒤에 float를 의미하는 'f'를 붙여야 하므로 3.14f가 된다.

2/3 = 0 정수 출력 10/3 = 3

public class EX03_09 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		float a = 0.1234567890123456789012345f; //float형 변수 a에 정밀도 25자리를 입력했음
		double b = 0.1234567890123456789012345; //double형 변수 b에 정밀도 25자리를 입력했음
		
		System.out.printf("%30.25f \n", a);
		System.out.printf("%30.25f \n", b);
		
	}

}

0.1234567910432815600000000

0.1234567890123456800000000

 

7. 문자형 데이터 형식 - 아스키코드와 유니코드

a. 아스키코드(ASCII) : 컴퓨터에서 표현하는 문자(특히 키보드에 있는 영문, 기호, 숫자 등)를 0~127에 대응시킨 코드

아스키코드 10진수 16진수
0~9 48~57 0x30~0x39
A~Z 65~90 0x41~0x5A
a~z 97~122 0x61~0x7A

정수형 97을 문자형으로 표현하면 a가 됨

char ch = 'a'; == char ch = 97;

 

8. 문자형 데이터 형식

a. 한 글자를 표현하는 문자형 - 문자형은 문자 또는 기호 하나를 저장하는 형식

문자형 데이터 형식 의미 크기 값의 범위
char 문자형 또는 정수형 2바이트 0~216-1 (65535)

b. char형에는 문자뿐만 아니라 값의 범위에 해당하는 정수를 대입할 수 있음

char형은 2바이트 크기의 정수형으로 취급해도 상관없다는 의미

즉 char형의 크기가 2바이트(516비트)이므로 표현할 수 있는 글자 수는 65536가지이고,

값의 범위는 0~65535. 따라서 아스키코드표의 0~127을 비롯해 한글, 중국어, 아랍어 등을 모두 표현할 수 있음

public class EX03_10 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		char a, b, c, d, e; //문자형 변수 5개를 선언한다
		
		a = 'A'; //문자형 변수 a에 'A'를 대입
		System.out.printf("%c \t", a); //문자형 변수 a를 문자형과 정수형으로 출력
		System.out.printf("%d \n", (int) a); //(int)변수 강제형변환
		
		b = 'a'; //문자형 변수 b에 'a'를 대입
		c = (char) (b+1); //문자형 변수 b에 1을 더하여 문자형 변수 c에 대입. 결과는 char로 캐스팅
		System.out.printf("%c \t", b);
		System.out.printf("%c \n", c);
		
		d = 90; //문자형 변수 d에 숫자 90을 대입
		System.out.printf("%c \n", d);
		
		d = '가'; //문자형 변수 d에 한글을 대입
		e = (char) (d+1); //문자형 변수 e에 1을 더하여 문자형 변수 c에 대입. 결과는 char로 캐스팅
		System.out.printf("%d \t", (int) d);
		System.out.printf("%c \n", e);
		
	
	}

}

A            65

a            b

Z

44032   각

- 3~7행

char형 'A' 서식에 따라 다른 출력 과

%c -> A

%d -> 65

- 9행 : 변수 b에 문자 'a를 대입, 10행에서 변수 c에 '변수 b의 값 11'을 대입. 그런데 변수 b에는 문자 'a'가 들어 있지만 이는 숫자 97과 동일하므로, 여기에 1를 더한 값인 98이 변수 b에 들어감. 이를 12행에서 문자형으로 출력하면 문자 'b'가 됨

- 14행 : d가 문자형 변수이지만 숫자 90일수도 있음. 숫자 90은 문자 'Z'와 동일하므로 결국 변수 d에 'Z'를 입력한 것과 같음. 그 결과 'Z가 출력

- 17행 : 변수 d에 한글 '가'를 대입, 19행에서 정수로 출력하니 한글 '가'는 44032 코드 값인 것이 확인. 18행에서 변수 d에 1을 증가시키고 20행에서 출력하여 '각'이 출력

 

public class EX03_11 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a, b; //정수형
		char c, d; //문자형
		
		a = 0xF90A; //정수형 변수 a에 16진수 0xF90A를 대입하고
		b = 0x50;   //b에 0x50을 대입
		
		System.out.printf("%c \n", a); //정수형 변수 a를 문자형으로 출력
		
		c = (char) b; //문자형 변수 c에 정수형 변수 b 값을 대입
		System.out.printf("%c \n", c); //문자형 변수 c를 문자형으로 출력
		
		d = '#'; //문자형 변수 d에 '#'를 대입
		System.out.printf("%c의 ASCII값은 %d 입니다 \n", d, (int) d); //문자형 변수 d를 두 가지 형태로 출력
	}

}

P

#의 ASCII값은 35 입니다

 

9. 참과 거짓을 표현하는 불 (Boole) / 논리형

문자형 데이터 형식 의미 크기 값의 범위
boolean 참, 거짓을 저장 1바이트 true, false만 저장

a. 실제로 참을 1, 거짓을 0으로 취급하면 1바이트(=8비트)가 아닌 1비트만으로도 표현이 가능하지만, JAVA는 최소 접근 단위가 1바이트이므로 크기는 1바이트를 사용

public class EX03_12 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		boolean boo1, boo2; //불형(논리형) 변수 2개를 선언
		
		boo1 = true; //boo1 변수에 true를 대입
		System.out.printf("%s \n", boo1); //boo1 변수를 출력
		
		boo2 = (10 == 20); //boo2 변수에 10과 20을 비교한 결과를 대입
		System.out.printf("%s \n", boo2); //boo2 변수를 출력
	}

}

true

false

 

- 8행 : (10 == 20)은 '10과 20이 같다'의 결과이므로 true 또는 false가 반환

 

10. 여러 글자를 표현하는 문자열

a. 문자열의 개념은 '문자형의 집합'이고 '문자열'이라는 데이터 형식은 따로 존재하지 않는다.

b. 문자형 데이터 형식 char는 한 글자만 저장한다.

c. 문자열은 데이터 형식으로 지원되지 않고 String 클래스로 사용할 수 있다.

문자형 데이터 형식 의미 크기 값의 범위
String 문자열 (입력한 글자 수 X 2) 바이트 저장되는 모든 값은 글자로 저장됨
public class EX03_13 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str1 = "IT CookBook 입니다."; //str1 문자열 변수를 선언하고, 선언과 동시에 값을 입력
		
		String str2 = "10"; //str2, str3 문자열 변수를 선언하고 각각에 문자열 "10"과 "20"을 대입
		String str3 = "20";
		
		str1 = "Java 입니다."; //str1 문자열 변수에 값을 대입, 위에 넣었던 IT~는 삭제됨
		
		System.out.printf("%s \n", str1); //str1을 출력
		System.out.printf("%s \n", str2 + str3); //str2와 str3의 합계를 출력, +연산 글자+글자 (합계)연결연산자
	} //"123"+"567" => 123567 순서대로 연결

}

Java 입니다.

1020