컴퓨터는 어떤 말을 사용할까
언어란 무엇인가
- 모든 언어의 뜻은 기호의 집합으로 인코딩(encoding)됨
- 원활한 의사소통을 위해 당사자들이 모두 같은 문맥(context)를 공유해서
같은 기호에 같은 뜻을 부여해야 함
문자 언어
- 문자 언어는 기호를 나열한 것
- 언어마다 기호와 기호 유형이 달라질 수 있음
- 언어마다 순서도 다를 수 있음
- 서체에 따라 기호를 구분하지는 않음
- 문자 언어의 틀
- 기호가 들어갈 상자
- 상자에 들어갈 기호
- 상자의 순서
비트
- 자연어에서 상자를 문자(character), 컴퓨터에서는 비트(bit)라고 부름
- 비트: binary (2진법) + digit (숫자)
- 비트를 사용하면 적은 비용으로 편리하기 기호를 담을 수 있음
- 2진법: 두 가지 부분으로 이뤄진 어떤 대상
- 숫자: 10진수를 표현하는 10가지 기호 (0~9)
- 컴퓨팅 (컴퓨터를 사용한 계산)을 통해 비트에 의미를 부여
논리 연산
- 불리언 대수
- 논리 연산: 다른 비트들이 표현하는 내용으로부터 새로운 비트를 만들어내는 동작
- 불리언 대수: 비트에 대해 사용할 수 있는 연산 규칙의 집합
- 기본 불리언 연산자
- NOT: 논리적 반대, 입력의 상태를 반대로 반전시키기만 함
- AND: 둘 이상의 비트에 작용, 두 입력이 모두 참일 때만 참을 돌려줌
- OR: 둘 이상의 비트에 작용
- 합성 불리언 연산자
- XOR: exclusive OR, 첫 번째 비트와 두 번째 비트가 다른 값인 경우에만 참이 됨
- 드모르간의 법칙
- a AND b 연산 === NOT (NOT a OR NOT b)
- NOT 연산을 충분히 사용하면 AND 연산은 OR 연산으로 혹은 그 반대로 대신 가능
- 긍정 논리(정 논리)에 더해 부정 논리(부 논리)를 기술하는 명제 사용 시 활용 가능
- 연산을 최소로 사용하면 비용도 최소화 가능
정수를 비트로 표현하는 방법
- 양의 정수 표현
- 10진수 체계에서는 10가지 기호인 숫자를 상자에 담을 수 있음
- 밑이 10인 시스템
- 비트를 사용하면 각 상자의 자릿수는 2의 거듭제곱
- 2진수 체계는 2를 밑으로 하는 수 체계
- 비트의 개수가 표현할 수 있는 값의 범위 결정
- 2진수에서 가장 오른쪽의 비트를 LSB (Least Significant Bit) 가장 작은 유효 비트라고 부르고,
가장 왼쪽 비트를 MSB (Most Signficant Bit) 가장 큰 유효 비트라고 부름
- 가장 왼쪽에 있는 상자보다 더 왼쪽에 0을 추가하는 것을 leading zero라고 부름
- 2진수 덧셈
- 덧셈 결과가 우리가 사용할 비트의 개수로 표현할 수 있는 범위 넘어서면 오버플로 발생
- MSB 위쪽에서 1을 빌려오는 경우 언더플로 발생
- 컴퓨터에는 조건 코드 (상태 코드) 레지스터가 오버플로/언더플로 비트 같은 정보 담아둠
- 음수 표현
- 부호와 크기
- 음수와 양수를 구분하기 위해 부호(sign) 사용
- MSB를 부호에 사용하기로 결정함
- 부호 비트가 0이면 양수, 1이면 음수로 취급
- 부호와 크기(sign and magnitude) 표현법
- 한 비트를 부호에 사용하고 나머지 비트를 수의 크기로 사용하는 방법
- 문제점
- 0을 표현하는 방법이 2가지인 것에 대한 비용 낭비의 문제점
- XOR과 AND를 통한 덧셈 계산 사용 불가
- 1의 보수
- 1의 보수(one's complement) 표현법
- 양수의 모든 비트를 뒤집는 방법
- 문제점
- 0을 두 가지 방식으로 표현하는 문제
- MSB에서 올림 발생 경우 LSB로 전달해야 하는 순환 올림 방식 -> 복잡 (하드웨어 추가 필요)
- 2의 보수
- 4비트에서 -1을 표현하는 비트 패턴 => 1111
- 2의 보수 표현법
- 어떤 수의 비트를 뒤집고 1을 추가하면 음수를 얻을 수 있음
실수를 표현하는 방법
- 고정소수점 표현법
- 소수점의 위치가 항상 일정
- 쓸모 있는 범위의 실숫값을 표현하기 위해 필요한 비트 개수가 너무 많은 문제
- 부동소수점 표현법
- 부동 소수점 표현법
- 가수 부분은 2진 소수, 지수 부분은 2의 거듭제곱 횟수를 표현
- 지수와 가수를 분리함으로써 수를 표현할 때 필요한 0을 모두 저장하지 않고도 큰 수나 작은 수 표현 가능
- 문제점
- 비트 조합 낭비 많음
- 비트 패턴이 가능한 모든 수 표현 불가
- IEEE 부동소수점 수 표준
- 컴퓨터에서 계산을 수행할 때 실수를 표현하는 표준 방법
- 가수와 지수에 대해 각각 부호 비트 사용
- 지수에 대한 부호 비트는 지수의 비트 패턴에 감춰져 있음
- 낭비되는 비트 조합을 최소화하고 반올림을 쉽게 하기 위한 여러 가지 트릭이 사용됨
- 정규화
- 똑같은 비트를 사용하더라도 정밀도 더 높이고 싶음
- 가수를 조정해서 맨 앞에 0이 없게 만듦 (지수도 조정 필요)
- 가수의 맨 왼쪽 비트가 1이라는 사실을 알고 있으므로 생략 (가수에 1비트 더 사용 가능)
- 기본 정밀도 부동소수점 수 (단정도 실수)
- 32비트 사용, 7비트 정밀도
- 2배 정밀도 부동소수점 수 (배정도 실수)
- 64비트 사용, 15비트 정밀도
2진 코드화한 10진수 시스템
- BCD (Binary-Coded Decimal)
- 2진 코드화한 10진수
- 4비트를 사용해 10진 숫자 하나 표현
- 디스플레이나 가속도 센서 등에 활용
- 비트 낭비 문제 발생
2진수를 다루는 쉬운 방법
- 8진 표현법
- Octal Representation
- 2진수 비트들을 3개씩 그룹으로 묶기
- 16진 표현법
- Hexa Representation
- 2진수 비트들을 4개씩 그룹으로 묶기
- 프로그래밍 언어의 진법 표기법
- 0으로 시작하는 숫자는 8진 숫자
- 1~9사이 숫자로 시작하는 숫자는 10진수
- 0x가 앞에 붙은 숫자는 16진수
- (참고) 0b - 2진수 (C++)
비트 그룹의 이름
- 4비트 덩어리 -> 1니블
- 8비트 덩어리 -> 1바이트
- 32비트 덩어리 -> 1워드
텍스트 표현
- 아스키 코드
- 정보 교환을 위한 미국 표준 코드
- 모든 기호에 대해 7비트 수 값 할당
- ex) A는 65
- 다른 표준의 진화
- 비트 가격이 떨어짐에 따라 유니코드라는 새로운 표준이 만들어짐
- 문자에 16비트 코드 부여
- 이후 21비트까지 확장됨
- 유니코드 변환 형식 8비트
- 컴퓨터는 7비트값을 처리하도록 설계되지 않아서 8비트를 사용해 아스키 문자를 저장함
- 인코딩
- 다른 비트 패턴을 표현하기 위해 사용하는 비트 패턴
- UTF (Unicode-Transformation-Format)
- UTF-8
- 모든 아스키 문자를 8비트로 표현하여 아스키 데이터를 인코딩할 때는 추가 공간 필요 없음
- 문자를 8비트 덩어리(Octet)의 시퀀스로 인코딩함
문자를 사용한 수 표현
- 출력 가능하게 변경한 인코딩
- 아스키 코드에서 제어 문자가 아닌 문자로 변경한 인코딩
- 8비트 데이터를 7비트 데이터만 지원하는 통신 경로를 통해 송수신하기 위한 인코딩 방법
- 베이스64 인코딩
- 3바이트의 데이터를 4문자로 표현
- 6비트 덩어리로 나눠서 각각에 출력 가능한 문자 할당해서 표현
- 모든 3바이트 조합을 4바이트 조합으로 표현 가능
- 패딩이라는 문자를 도입
- 전자우편 첨부파일 전송에 많이 사용됨
- URL 인코딩
- 퍼센트 인코딩
색을 표현하는 방법
- 투명도 추가
- 이미지 합성은 색값을 알파로 곱하는 과정을 통해 이뤄짐
- 색 인코딩
- 웹에서는 16진 트리플렛으로 표현
정리
- 단순한 비트를 사용해 아주 큰 숫자나 문자, 색 등의 복잡한 요소를 표현
- 10진수 -> 2진수 표현, 2진수를 사용한 사칙 연산, 음수와 분수 표현 방법
- 비트를 사용하여 문자를 인코딩하는 여러 가지 표준
'Books > 한 권 컴퓨터 구조와 프로그래밍 ✔️' 카테고리의 다른 글
[한 권 컴퓨터 구조와 프로그래밍] 6장 - 입출력과 네트워킹 (0) | 2022.08.11 |
---|---|
[한 권 컴퓨터 구조와 프로그래밍] 5장 - 컴퓨터 아키텍처와 운영체제 (0) | 2022.08.11 |
[한 권 컴퓨터 구조와 프로그래밍] 4장 - 컴퓨터 내부 구조 (0) | 2022.08.11 |
[한 권 컴퓨터 구조와 프로그래밍] 3장 - 메모리와 디스크의 핵심: 순차 논리 (0) | 2022.08.11 |
[한 권 컴퓨터 구조와 프로그래밍] 2장 - 전자 회로의 조합 논리 (0) | 2022.07.18 |
댓글