4장. 데이터 표현 방식의 이해
4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1
4-1 컴퓨터의 데이터 표현 2진수와 10진수 10진수 : 0~9를 이용한 데이터의 표현 2진수 : 0과 1을 이용한 데이터의 표현 컴퓨터는 내부적으로 모든 데이터 2진수로 처리 그림 4-2
4-1 컴퓨터의 데이터 표현 16진수와 10진수 16진수 : 0~9, a, b, c, d, e, f를 이용한 데이터의 표현 그림 4-3
데이터의 표현 단위인 비트(bit)와 바이트(byte) 4-1 컴퓨터의 데이터 표현 데이터의 표현 단위인 비트(bit)와 바이트(byte) 비트 : 데이터 표현의 최소 단위, 2진수 값 하나 (0 or 1)을 저장 바이트 : 8비트 == 1바이트 그림 4-4
4-1 컴퓨터의 데이터 표현 연습문제 4-2
4-1 컴퓨터의 데이터 표현 프로그램상에서의 8진수, 16진수 표현 8진수 : 0으로 시작 16진수 : 0x로 시작 8진수 : 0으로 시작 16진수 : 0x로 시작 예제 notation.c 참조 int a = 10; // 10진수. 아무런 표시도 없으므로… int b = 0xa; // 16진수. 0x로 시작하므로… int c = 012; // 8진수. 0으로 시작하므로…
4-2 정수와 실수의 표현 방식 정수의 표현 방식 MSB : 가장 왼쪽 비트, 부호를 표현 그림 4-7
4-2 정수와 실수의 표현 방식 잘못된 음의 정수 표현 방식 양의 정수 표현 방식을 적용한 경우 그림 4-8
4-2 정수와 실수의 표현 방식 정확한 음의 정수 표현 방식 2의 보수를 이용한 음의 정수 표현 방식 그림 4-9
4-2 정수와 실수의 표현 방식 음수 표현 방식의 증명 그림 4-10
4-2 정수와 실수의 표현 방식 연습문제 4-3 양의 정수 01001111 [ ] 00110011 [ ] 음의 정수 01001111 [ ] 00110011 [ ] 음의 정수 10101001 [ ] 11110000 [ ]
4-2 정수와 실수의 표현 방식 잘못된 실수의 표현 방식 정수를 표현하는 방식을 실수 표현에 적용 작은 수를 표현하는데 있어서 한계를 지님 그림 4-11
4-2 정수와 실수의 표현 방식 정확한 실수 표현 방식 오차가 존재하는 단점을 지님, 그러나 효율적인 표현 방식 오차가 존재하는 단점을 지님, 그러나 효율적인 표현 방식 예제 float_error.c 참조 그림 4-12
4-3 비트 단위 연산 비트 단위 연산자의 종류 표 4-1 연산자 연산자의 의미 결합성 & | ^ ~ << 비트 단위 AND ex) a & b | 비트 단위 OR ex) a | b ^ 비트 단위 XOR ex) a ^ b ~ 비트 단위 NOT ex) ~a << 왼쪽으로 이동 ex) a << 2 >> 오른쪽으로 이동 ex) a >> 2 표 4-1
4-3 비트 단위 연산 & 연산자 : 비트 단위 AND 0 & 0 0을 반환 0 & 1 0을 반환 0 & 0 0을 반환 0 & 1 0을 반환 1 & 0 0을 반환 1 & 1 1을 반환 int main(void) { int a=15; // 00000000 00000000 00000000 00001111 int b=20; // 00000000 00000000 00000000 00010100 int c = a&b; printf("AND 연산 결과 : %d", c); // 출력 결과 4
4-3 비트 단위 연산 & 연산자 : 비트 단위 AND 그림 4-13
4-3 비트 단위 연산 | 연산자 : 비트 단위 OR 0 | 0 0을 반환 0 | 1 1을 반환 0 | 0 0을 반환 0 | 1 1을 반환 1 | 0 1을 반환 1 | 1 1을 반환 int main(void) { int a=15; // 00000000 00000000 00000000 00001111 int b=20; // 00000000 00000000 00000000 00010100 int c = a|b; printf("OR 연산 결과 : %d", c); // 출력 결과 31
4-3 비트 단위 연산 | 연산자 : 비트 단위 OR 그림 4-14
4-3 비트 단위 연산 ^ 연산자 : 비트 단위 XOR 0 ^ 0 0을 반환 0 ^ 1 1을 반환 0 ^ 0 0을 반환 0 ^ 1 1을 반환 1 ^ 0 1을 반환 1 ^ 1 0을 반환 int main(void) { int a=15; // 00000000 00000000 00000000 00001111 int b=20; // 00000000 00000000 00000000 00010100 int c = a^b; printf("XOR 연산 결과 : %d", c); // 출력 결과 27
4-3 비트 단위 연산 ^ 연산자 : 비트 단위 XOR 그림 4-15
4-3 비트 단위 연산 ~ 연산자 : 비트 단위 NOT ~ 0 1을 반환 ~ 1 0을 반환 int main(void) ~ 0 1을 반환 ~ 1 0을 반환 int main(void) { int a=15; int b=~a; printf("NOT 연산 결과 : %d", b); // 출력 결과 -16
4-3 비트 단위 연산 ~ 연산자 : 비트 단위 NOT 그림 4-16
<< 연산자 : 왼쪽 쉬프트(shift) 연산 4-3 비트 단위 연산 << 연산자 : 왼쪽 쉬프트(shift) 연산 a<<b a의 비트들을 b칸씩 왼쪽으로 이동한 값을 반환 8<<2 8의 비트들을 왼쪽으로 2칸씩 이동한 값을 반환 int main(void) { int a=15; // 00000000 00000000 00000000 00001111 int b= a<<2; // a의 비트들을 왼쪽으로 2칸씩 이동 printf("<<2 연산 결과 : %d", b); // 출력 결과 60
<< 연산자 : 왼쪽 쉬프트(shift) 연산 4-3 비트 단위 연산 << 연산자 : 왼쪽 쉬프트(shift) 연산 그림 4-17
>> 연산자 : 오른쪽 쉬프트(shift) 연산 4-3 비트 단위 연산 >> 연산자 : 오른쪽 쉬프트(shift) 연산 a>>b a의 비트들을 b칸씩 오른쪽으로 이동한 값을 반환 8>>2 8의 비트를 왼쪽으로 2칸씩 이동한 값을 반환 a=-10; b=a>>2; // a의 비트들을 2칸씩 오른쪽으로 이동한 값을 b에 저장
>> 연산자 : 오른쪽 쉬프트(shift) 연산 4-3 비트 단위 연산 >> 연산자 : 오른쪽 쉬프트(shift) 연산 그림 4-18