데이터 형식과 배열
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 | ||||||||
2³ | 2² | 2¹ | 20 | 2³ | 2² | 2¹ | 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
'개발 일기 > Java Programming' 카테고리의 다른 글
관계 연산자 (0) | 2023.09.11 |
---|---|
산술 연산자 | 우선순위 | 강제 형 변환 | 대입 연산자 | 증감 연산자 | 복합 연산자 (0) | 2023.09.11 |
변수 | 선언 | 정수형 int | 실수형 float | 실수형 double | 대입 | 대입 연산자 (0) | 2023.09.06 |
System.out.printf() 메소드의 서식 지정 | %d 정수형 서식 | %f 실수형 서식 | %s 문자열형 서식 | 서식 문자 (0) | 2023.09.03 |
System.out의 기본 | 프린트 명령어 | 메소드 | println | print | printf | 서식 (0) | 2023.09.01 |