Internal Language System(내부 언어 체계)
컴퓨터 언어
bit(비트) : binary + digit의 합성어로 2진법을 표현하는 수단
논리 연산
다른 비트들을 표현하는 내용으로부터 새로운 비트를 만들어내는 동작
불리언 대수
조지 불(George Boole)이 만든 비트에 사용할 수 있는 연산 규칙의 집합
NOT: 논리적 반대
T
F
F
T
AND: 둘 이상의 비트에 작용하며, 모든 비트가 참일 경우에만 참
T
T
F
F
F
F
OR: 둘 이상의 비트에서 작용하며, 하나 이상의 비트가 참이면 결과도 참
T
T
T
F
T
F
XOR: Exclusive OR이라는 뜻으로 첫 번째 비트와 두 번째 비트가 다른 값인 경우메나 참
T
F
T
F
T
F
드모르간 법칙
오거스터스 드모르간(Augustus De Morgan)이 발견한 불리언 대수에 적용할 수 있는 법칙
a AND b = NOT(NOT a OR NOT b)
정수를 비트로 표현하는 방법
양의 정수 표현
인간은 보통 10진수를 사용하는데(손가락이 총 10개인 것에서 출발) 컴퓨터의 언어는 1과 0 둘 뿐이라 2진수 표현법을 사용한다. 그래서 10진수의 양의 정수를 표현하는데에 있어 2진수라고 문제가 되는 것은 없다.
5028 = 212 + 29 + 28 + 27 + 25 + 22 = 1001110100100(2)
그러나 비트 개수에 따라 2의 제곱수를 표현할 수 있는 한계가 있기 때문에 표현할 수 있는 값의 범위가 정해져있다. 또한 이 비트들 중 가장 왼쪽의 비트를 가장 큰 유효 비트(Most Significant Bit)라고 부르며, 가장 오른쪽 비트를 가장 작은 유효 비트(Least Significant Bit)라고 부른다.
덧셈
10진수와 마찬가지로 2진수에서도 각 비트를 LSB에서 MSB 쪽으로 계속 더하며 결과가 1보다 크면 다음 자리로 올린다. 이를 논리 연산을 사용하여 구할 수도 있는데 다음 표와 같다.
0
0
0
00
0
0
0
0
1
0
01
1
0
1
1
0
0
01
1
1
0
1
1
1
10
0
1
1
두 비트를 서로 더한 결과 = 비트를 XOR 한 값
올림 = 두 비트를 AND 한 값
음수 표현
위에서 표현했던 비트는 양수만 표현을 했고, 이를 구분하기 위해 부호(sign)를 표현하기 위한 비트를 하나를 사용해 표현할 수 있다. 음수 부호는 MSB에 위치하며 0이면 양수, 1이면 음수로 취급한다. 그러나 이렇게 하게 되면 위에 사용했던 덧셈 방식으로는 정상적인 값이 나오지 않아 2진수로 양수와 음수를 표현하는 다른 방법을 사용한다.
1의 보수
양수의 모든 비트를 뒤집어(NOT 연산) 표현하는 방법으로 0111(2) -> 1000(2) 로 변환하여 표현하는 방법이다. 하지만 여전히 아래와 같은 문제가 존재한다.
0을 두 가지 방식으로 표현(0000(2), 1111(2))
덧셈 결과 후 MSB에 올림이 발생한 경우 LSB로 올림을 전달해야하는 순환 올림(end-around carry) 필요
이를 해결하기 위해선 순환 올림을 처리하기 위한 하드웨어를 추가해야하여 추가적인 코스트가 발생하기 때문에 현대 컴퓨터에서는 쓰지 않는 방법이다.
2의 보수
모든 비트에 NOT 연산을 취한 뒤 1을 더하여 표현하는 방법으로 0111(2) -> 1001(2) 로 변환하여 표현하는 방법이다. 0이 두 가지 방식으로 표현되는 문제도 사라졌으며 올림이 발생했을 경우 그냥 버리더라도 정확한 덧셈이 가능하다. 또한 0을 표현하는 방식이 한 가지로 줄어 그 공간을 가장 작은 음수에 할당하여 사용할 수 있다.
1의 보수 표현 범위 : -(2n-1 + 1) ~ (2n-1 - 1)
2의 보수 표현 범위 : -(2n-1) ~ (2n-1 - 1)
실수 표현
고정 소수점 표현
2진 소수점 위치를 임의로 정해 고정적으로 사용하는 것으로 예를 들어 4비트가 있을 경우 그 중 2비트는 정수, 나머지 2비트는 분수를 표현하는데 사용하는 방식이다. (10.11(2) = 2.5) 연산에 대해 잘 작동하지만, 실숫값을 표현하기 위한 필요 비트 개수가 너무 많아 일부 유용한 경우가 아니거나 특정 목적을 가진 컴퓨터를 제외한 일반 컴퓨터에서는 사용하지 않는다.
부동 소수점 표현
과학적 표기법에서는 0.0012 를 1.2 * 10-3로 표현하는데 이 방법을 2진수에 적용한 방법이다.
예를 들어 4비트가 있을 경우 그 중 2비트는 가수, 나머지 2비트를 지수로 표현했을 경우 1.101(2) = 3.0(1.5 * 21) 로 표현할 수 있다.
하지만 0.101
, 1.000
과 같이 1.0을 표현하는 방법이 두 가지가 있으며, 비트 패턴이 가능한 모든 수를 표현할 수 없다.(6.5 표현 불가)
IEEE 부동소수점 수 표준
위의 단점을 최소화 시키기 위한 실수를 표현하는 표준 방법으로, 훨씬 많은 비트와 가수와 지수에 대해 각각 부호 비트를 사용한다. 지수와 가수의 비트 수를 조절하여 정밀도를 조절하며 당연하게도 높은 정밀도를 얻기 위해서는 더 많은 비트를 사용해야한다.
2진 코드화한 10진수
단순히 10진수 한 자리를 4비트의 2진수를 사용해 표현하는 방법으로(12 = 0001 0010) 효율성 문제로 거의 사용하지 않는다.(디스플레이나 가속도 센서 등에선 사용하는 경우가 있다.)
2진수를 다루는 방법
8진 표현법
비트를 3개씩 그룹으로 묶어 표현
16진 표현법
비트를 4개씩 그룹으로 묶어 표현하는 방법으로 현재 많이 쓰이는 표현법이다. 11010011111111000011(2) = d3fc1(16)
프로그래밍 진법 표현법
프로그래밍 언어 내에서 표현 되는 방식으로 보통 다음과 같은 표기법을 따른다.
8진수 : 0으로 시작(017(8) = 15)
10진수 : 1~9 사이의 숫자로 시작(123(10) = 123)
16진수 : 0x로 시작하는 숫자(0x12f(16) = 303)
텍스트 표현
비트를 통해 숫자를 표현하고, 그 수를 이용해 문자를 표현하는 방법
아스키 코드
키보드에있는 모든 기호에 대해 7비트 수 값을 할당한 방식으로 글자를 출력하는 코드 뿐만 아니라 제어를 하기위해 쓰이는 제어 문자도 존재하며 상당수는 통신 제어를 위한 문자다. 하지만 아스키코드는 영어에 한정됐을 경우에만 모든 문자를 표현할 수 있었고, 한국어/중국어/아랍어 등 을 표현하기 위해서는 더 많은 비트가 필요했고 16비트를 사용하는 유니코드라는 새로운 표준이 생겨났다.
참고자료
Last updated
Was this helpful?