비트 : 2진법의 binary + 숫자digit의 합성. 비트는 2진법을 사용한다. 비트를 사용하면 적은 비용으로 편리하게 기호를 담을 수 있다.
논리연산 : 다른 비트들이 표현하는 내용으로부터 새로운 비트(참 / 거짓)를 만들어내는 동작
불리언대수 : 비트에 대해 사용할 수 있는 연산 규칙의 집합
NOT : NOT T = F
AND : T AND F = F
OR : T OR F = T
XOR : T XOR F = T; 각 피연산자가 다른경우에만 참이 된다.
드모르간의 법칙 : a AND b는 NOT(NOT a and b)와 같다. 부정논리를 구현할 때, 동등한 긍정논리로 표현하여 훨씬 간단하게 결과를 계산할 수 있다.
정수를 비트로 표현하는 방법
양의 정수 표현 : 비트를 사용할 때는 2를 밑으로 하는 2진수 체계를 사용한다. 가장 오른쪽 비트를 가장 작은 유효비트(least significant bit), 가장 왼쪽의 비트를 가장 큰 유효 비트(most significant bit)라고 부른다.
2진수 덧셈 : 2진수에서 각 비트를 LSB에서 MSB쪽으로 더하며, 결과가 1보다 크면 1을 다음 왼쪽자리로 올린다. 사용하는 비트의 개수로 표현할 수 있는 범위를 벗어나면 오버플로가 발생한다. MSB에서 올림값이 발생하면, 조건코드(상태코드) 레지스터의 오버플로 비트에 오버플로 발생여부를 기록한다.
음수 표현
부호와 크기 : 음수와 양수를 구분하기 위해 흔히 MSB를 부호sign을 사용하고, 나머지 비트를 수의 크기로 사용하는 표현법이다. 그러나 부호와 크기 표현법은 0을 표현하는 방법이 2가지라 낭비가 있다는 점, XOR과 AND를 통한 덧셈계산을 사용할 수 없다는 점에서 널리 쓰이지 않는다.
1의 보수 : 음수를 표현하기 위해 양수의 모든 비트를 뒤집는 방법. 그러나 MSB에서 올림이 발생한 경우 LSB로 올림을 전달하는 순환올림이 발생한다. 따라서 덧셈과정을 처리하기 위한 추가적인 비용이 발생하여 널리 쓰이지 않는다.
2의 보수 : 부호가 있는 정수를 표현할 때 널리 쓰인다. 어떤 수의 비트를 뒤집고, 1을 추가하여 음수를 얻는다.
실수를 표현하는 방법
고정소수점 표현법 : 필요한 범위의 실수값을 표현하기 위해 필요한 비트의 개수가 너무 많아지기 때문에 잘 쓰이지 않는다.
부동소수점 표현법 : 가수(소수점 왼쪽이 한자리뿐인 2진 소수)와 지수(2의 거듭제곱 횟수)로 나누어 실수를 표현한다. 동일한 비트라도 표현하는 실수에 따라 소수점이 변경된다하여 부동소수점 표현법이라 한다. 이러한 부동소수점 표현법은 비효율성과 부작용이 있지만, 표준방법으로 사용된다.
IEEE 부동소수점 수 표준 : 부동소수점 시스템에서 낭비되는 비트 조합을 최소화하고 반올림을 쉽게 하기 위해 IEEE 754 표준으로 기능을 정의한다. 기본정밀도 수는 32비트, 2배정밀도 수는 64비트를 사용하여 부동소수점을 표현한다.
2진 코드화한 10진수 시스템 : 2진코드화한 10진수 BCD는 2진수를 효율적으로 활용하지 못해 많이 쓰이진 않지만, 디스플레이나 가속도 센서등 비주류 분야에서 사용되는 경우가 있다.
2진수를 다루는 쉬운 방법
8진표현법 : 비트를 3개씩 그룹으로 묶어 각 그룹에 8진 숫자를 부여하여 2진수를 표현한다.
16진표현법 : 비트를 4개씩 그룹으로 묶어 각 그룹에 16개 기호 중 하나(0~9~a~f)를 할당.
프로그래밍 언어의 진법 표기법 : 0으로 시작하면 8진수, 1~9로 시작하면 10진수, 0x로 시작하면 16진수라 구분한다.
비트 그룹의 이름 : 니블(4비트), 바이트(8비트), 하프워드(16비트), 워드(32비트), 더블워드(64비트). 킬로비트나 킬로바이트는 실제로 1000배를 뜻하진 않고, 밑이 2면서 1000에 가장 가까운 2^10=1024배를 뜻한다. 밑이 10인 경우와도 혼동되어 이를 구분하기 위해 밑이 2인 경우는 키비, 메비, 기비 등의 용어로 표현하는 경우가 늘어나고 있다.
텍스트 표현
아스키코드 : 키보드에 있는 모든 기호에 7비트 수 값을 할당.
다른 표준의 진화 : 영미권 이외의 언어지원의 필요성으로 다른 표준들이 등장. 유니코드 표준은 문자에 16비트를 부여. 오늘날에는 21비트까지 확장 됨.
유니코드 변환 형식 8비트 : 유니코드는 문자 코드에 따라 8비트 덩어리의 시퀀스(옥텟)로 인코딩.
문자를 사용한 수 표현
출력 가능하게 변경한 인코딩(QP인코딩, Quoted-Printable encoding) : 8비트 데이터를 7비트 데이터만 지원하는 통신경로로 송수신하기 위한 인코딩 방법. 전자우편 첨부를 처리하기 위해 만들어짐. 1바이트를 표현하기위해 3바이트를 사용하기 때문에 매우 비효율적임.
베이스64인코딩 : 3바이트(24비트)를 6비트 4덩어리로 나누고, 각 덩어리에 출력가능한 문자를 할당해 표현. 모든 3바이트 조합을 4바이트 조합으로 변환할 수 있다. 원본 데이터 길이가 3바이트 배수가 아닌 경우, 패딩문자를 도입하여 끝에 = 혹은 ==를 붙인다. 전자우편 첨부파일 전송에 여전이 많이 사용되고 있다.
URL인코딩 : URL에서 몇몇 문자가 특별한 의미를 지니기 때문에, 해당문자를 리터럴로 표현하기 위해 등장한 인코딩이다. 퍼센트 인코딩이라고도 불리며, %뒤에 16진 표현을 덧붙이는 방식으로 문자를 인코딩한다.
색을 표현하는 방법 : 컴퓨터 모니터는 RGB색을 섞어 색을 만들어 낸다(RGB모델)
투명도 추가 : 알파라는 투명도 값을 추가하고, 알파 값을 미리 곱한 RGB값을 저장하여 알파를 곱하는 계산과정 반복을 생략한다.
색 인코딩 : 웹페이지는 UTF-8 문자 시퀀스로 이루어지는 텍스트를 표현하기 때문에, 텍스트를 사용해 색을 표현할 방법이 필요하다. 따라서 웹에서는 URL인코딩과 비슷하게 색을 16진 트리플렛으로 표현한다. #뒤에 16진 숫자를 추가해 #rrggbb처럼 표현하는 방식이다.
정리 : 단순한 비트를 사용해 아주 큰 숫자나 문자, 색 등 복잡한 요소를 표현할 수 있다.