반응형
언어의 세 가지 구성 요소
- 기호가 들어갈 상자: 비트
- 상자에 들어갈 기호
- 상자의 순서
비트
비트는 2진법을 사용한다. 이 비트를 조합해 이어 붙여서 표현한다.
논리 연산
- 비트 사용법 중 하나는 true/false를 표현하느 ㄴ것이다.
- 다른 비트들이 표현하는 내용으로부터 새로운 비트를 만들어내는 동작을 '논리 연산'이라고 한다.
- 불리언 대수
- 불리언 연산자는 NOT, AND, OR과 합성연산인 XOR
- 드모르간의 법칙
- NotNot 비가온다 or NotNot 춥다 ⇒ Not Not 코트를 입는다.
- Not(비가온다 and 춥다) ⇒ Not(코트를 입는다)
- Not 연산을 수행하는데 하드웨어에 실제로 돈이 많이 들고
- 연산을 연쇄적으로 사용하면 계산이 느려진다.
정수를 비트로 표현하는 방법
음수 표현
- 부호와 크기
- 가장 왼쪽 비트를 부호로 사용한다.
- → 0을 표현하는 방법이 두 가지가 된다.
- → XOR, AND를 통한 덧셈 계산을 할 수 없다.
- 1의 보수
- 양수의 모든 비트를 뒤집어서 음수를 표현하는 1의 보수법
- 추가적인 하드웨어 없이는 제대로 작동할 수 었다.
- 비용이 더 든다.
- 2의 보수
- 하드웨어를 추가할 수 없고 XOR, AND 연산만 사용해야 한다면?
- +1을 더했을 때 0이 나오는 비트 패턴을 찾고, 이 패턴을 -1 이라고 한다.
- 4비트의 경우는 0001 이다.
- 1111 에 0001을 더하면 0000이 된다.
- 따라서 앞으로는 1111을 -1 을 표현하는 비트 패턴으로 사용하자.
- 이런 표현법을 2의 보수 표현법이라고 한다.
- 어떤 수의 비트를 뒤집고 1을 추가하면 음수를 얻을 수 있다.
실수 표현
- 고정 소수점 표현
- 분수 표현과 숫자 표현 위치를 둔다.
- 쓸모있는 범위의 실숫값을 표현하기 위해 필요한 비트 개수가 너무 많기 때문에 이런 방식을 사용하는 경우는 드물다.
- 부동 소수점 표현법
- 가수가 1.2로 같다고 해도 지수가 무엇인가에 따라 소수점 왼쪽 숫자의 자리사 1/10일 수도 있고 1일 수도 있기 때문에 이름이 부동 소수점이다.
- ??
- IEEE 부동소수점 수 표준
- 정규화 트릭
- 기본 정밀도
- 2배 정밀도
- 정규화 트릭
2진수를 다루는 쉬운 방법
2진수는 읽기 어렵기 때문에 더 읽기 쉽게 표현할 수 있는 방법을 고안해냈다.
8진 표현법
- 2진수 비트들을 3개씩 그룹으로 묶는다.
16진 표현법
- 0 ~ abcdef
프로그래밍 언어의 진법 표기
여러 프로그래밍 언어에서는 다음과 같은 표기법을 따른다.
- 0부터 시작하는 숫자는 8진 숫자다.
- 1부터 9 사이의 숫자로 시작하는 숫자는 10진수다.
- Ox가 앞에 붙은 숫자는 16진수다.
비트 그룹의 이름
- 비트는 너무 작아서 기본 단위로 사용하기에는 유용성이 떨어진다.
- 8비트 덩어리가 기본 단위로 널리 쓰이기 시작했고 이를 '바이트'라고 부른다.
텍스트 표현
아스키 코드
- 7비트 수 값을 할당
- 8진수 사용
다른 표준의 진화
- 영어 외의 언어를 지원해야 할 필요가 늘어나서 국제 표준화 기구는 유럽 언어를 지원할 수 있는 표준, 일본 산업 표준 위원회에서 JISX 0201 그리고 중국어, 아랍어, 한국(KS C 5601)을 만들었다.
- 다른 표준으로 만든 이유는 비트가 지금보다 더 비싼 시절에 표준이 만들어졌다.
- 그래서 문자를 7비트나 8비트에 욱여 넣었다.
- 비트 가격이 떨어짐에 따라 유니코드라는 새로운 표준이 만들어졌고, 16비트 코드를 부여했다.
- 유니코드는 그 후 21비트까지 확장됐다.
유니코드 변환 형식 8비트
- 문자를 표현하는데 8비트 사용으로 모든 문자를 표현할 수 있는데 16비트는 낭비되므로
- 문자 코드에 따라 각기 다른 인코딩을 사용해 이런 문제를 해결한다.
- 인코딩은 다른 비트 패턴을 표현하기 위해 사용하느 ㄴ비트 패턴을 뜻한다.
- 유니코드 변환 형식 8비트 (UTF-8 Unicode Transformation Format) 라는 인코딩 방식이 가장 널리 사용된다.
- UTF-8은 아스키가 아닌 문자의 경우 아스키를 받아서 처리하는 프로그램이 깨지지 않는 방법으로 문자를 인코딩한다.
- UTF-8은 8비트 덩어리(옥텟)의 시퀀스로 인코딩한다.
- 첫번째 덩어리의 MSB쪽에 있는 비트들이 8비트 덩어리 시퀀스의 길이를 표현한다.
- 프로그램이 문자 경계를 찾아야 하는 경우 이런 특성이 유용하다.
- 8비트 덩어리에 들어가지 않는 문자라면, 16비트를 사용해서 표현한다.
문자를 사용한 수 표현
베이스64 인코딩
- 3바이트 데이터를 4문자로 표현한다.
- 24비트를 6비트 덩어리로 나누고 각 덩어리에 6비트값에 출력 가능한 문자를 할당해 표현한다.
URL 인코딩
- URL에서는 문맥에서 몇몇 문자가 특별한 의미를 지니는데, 이런 특별한 의미를 지니는 문자를 리터럴로 사요할 필요가 있을 때
- 퍼센트 인코딩을 할 수 있다.
- /가 표현하는 특별한 의미를 뜻하고 싶지는 않은 경우, /를 %2F 라는 문자열로 대신한다.
색을 표현하는 방법
- 컴퓨터 모니터는 빨간색, 녹색 파란색 광선을 섞어서 색을 만들어내며 이런 색 표현법을 RGB색 모델이라고 부른다.
- 색을 표현할 때 24비트를 사용하는데 RGB
- 투명도까지 포함하여 32비트로 색을 표현한다.
투명도 추가
- 각 픽셀에 알파라는 투명도 값을 추가한다.
- 여러 다른 알파값의 색을 합성해 새로운 색을 만들어내는 방법을 정의하는 일련의 합성 계산식이 있다.
- 각 RGB에 알파값을 곱한다.
- 이미지 합성은 색값을 알파로 곱하는 과정을 통해 이뤄진다.
- 알파값을 미리 곱한 값을 저장한다는 말은 픽셀을 사용할 떄마다 알파를 곱하는 계산을 반복할 필요가 없다는 뜻이다.
색 인코딩
- 웹 페이지는 주로 사람이 읽을 수 있는 UTF-8 문자의 시퀀스를 통해 이뤄지는 텍스트를 표현하기 때문에 텍스트를 사용해 색을 표현할 방법이 필요하다.
- URL 인코딩과 비슷한 방법으로 색을 인코딩한다.
- 웹에서는 색을 16진 트리플렛(hex triplet)로 표현한다.
- 16진 트리플렛은 #뒤에 여섯 자리 16진 숫자를 추가해 '#rrggbb' 처럼 표현하는 방법이다.
- 각각의 6비트 색값을 두 자리 문자로 된 16진 표기로 바꾼다.
'CS' 카테고리의 다른 글
브라우저의 동작 원리 알아보기 (0) | 2021.06.22 |
---|