CH02 데이터 표현과 디지털 논리
수의 체계와 변환
진법
매번 진법을 마주할때마다 막연하게 생각했는데, 이번에 문득 진법의 한자가 궁금해서 찾아봤다. '진'은 '나아갈 진'이고, '법'은 '법 법'이다. 즉, 나아가는 법 내지는 체계의 의미가 진법이다. 그래서 진법 자체는 말 그대로 '나아가는 체계'이고 이를 조금 더 풀어서 설명하면 '수를 표현함에 있어서 다루는 숫자의 개수와 숫자의 위치에 대한 수 체계' 라고 할 수 있다.
진수 변환
다른 진수에서 10진수로 변환하거나 10진수를 다른 진수로 변환하는 구체적인 계산 방식을 다뤘다.
정보의 표현
컴퓨터는 결론적으로 2진법을 사용한다
이것에 관해서는 전기가 들어오고 나가고의 관점에서 컴퓨터가 사용하기에 가장 적절한 체계가 2진법이기 때문이라고만 알고 있었다. 책에서도 이 부분에 대해서 자세한 언급을 하고 있진 않다. 전기적 장치의 온/오프 개념과 딱 맞는 개념이라고만 언급되고 있다.
GPT 한테 물으니 아래와 같이 좋은 답변을 줬다.
컴퓨터가 2진수로 연산하는 이유는 주로 하드웨어 설계와 효율성 때문입니다. 주요 이유는 다음과 같습니다:
간단성: 2진수는 0과 1, 두 가지 상태만을 가집니다. 이는 전기 회로에서 쉽게 표현할 수 있어 하드웨어 설계가 단순해집니다. 전압이 있는 상태를 '1'로, 없는 상태를 '0'으로 표현할 수 있습니다.
에러 감지 및 수정: 2진수는 에러 감지와 수정이 상대적으로 쉽습니다. 노이즈나 다른 외부 요인에 의한 영향을 더 쉽게 교정할 수 있습니다.
효율성: 2진 연산은 더 적은 자원과 에너지를 사용하면서도 빠른 계산을 가능하게 합니다.
범용성: 2진수는 표현력이 높아 다양한 데이터 타입과 연산을 지원할 수 있습니다. 문자, 이미지, 소리 등 다양한 형태의 정보를 2진수로 표현할 수 있습니다.
논리 연산: 불 대수(boolean algebra)와 같은 논리 연산도 2진수로 쉽게 구현할 수 있어, 복잡한 연산을 효과적으로 수행할 수 있습니다.
10진수나 다른 진법은 이러한 특징을 모두 만족시키기 어렵습니다. 예를 들어, 10진수를 사용한다면 하드웨어가 10개의 다른 상태를 구분할 수 있어야 하므로 설계가 복잡해지고 에러 가능성이 높아질 수 있습니다. 따라서 2진수는 컴퓨터 연산에 가장 효율적인 진법으로 여겨집니다.
2진법을 사용해서 문자 a와 정수 20을 표현하면 아래와 같다.(이는 책의 예시이다)
a : 01100001(ASCII)
20 : 00000000 00000000 00000000 00010100
문자 표현
문자 표현 방식은 아스키, 유니코드 두 가지 방식이 있다. 다만 아스키코드 방식은 다양한 나라의 언어를 표현할 수 없어서 유니코드가 일반적으로 사용된다.
내가 실무에서 사용하는 인코딩 설정이 곧 아스키, 유니코드 방식 중 어떤 방식을 쓸지에 대한 명시적 설정이며 각 인코딩 방식(인코딩 방식을 정하면 곧 어떤 체계를 쓸지를 결정하는 것이다)에 따라 하나의 문자에 대해 사용하는 메모리 공간도 다르다.
아스키코드
확장된 아스키코드 체계를 기준으로 하나의 문자당 1바이트(8비트)를 사용한다. 제한된 공간을 사용하므로 다른 언어의 문자나 특수 문자 등 다양한 것을 표현하는데 한계가 있다.
유니코드
다국어 표현이 가능하다. 인코딩 방식에 따라 하나의 문자에 대해 사용하는 메모리 공간도 다르다.
네, 위에서 설명한 1바이트, 2바이트, 4바이트는 딱 하나의 문자 'a'를 표현하기 위해 사용하는 공간입니다. 인코딩 방식에 따라 하나의 문자를 표현하는 데 필요한 바이트 수가 다를 수 있습니다.
UTF-8: 문자 'a'는 1바이트로 표현됩니다.
UTF-16: 문자 'a'는 2바이트로 표현됩니다.
UTF-32: 문자 'a'는 4바이트로 표현됩니다.
이러한 바이트 수는 특정 문자나 언어에 따라 다를 수 있습니다. 예를 들어, UTF-8에서는 다른 언어의 특정 문자는 2바이트, 3바이트, 또는 4바이트로 표현될 수 있습니다.
텍스트 압축
허프만 코딩이라는 텍스트 압축 방식에 대해서 학습했다. 문자당 빈도수를 계산해서 이를 트리구조로 만들어서 최종적으로 문자를 표현하는데 사용하는 메모리를 줄이는 것이 핵심이다.
정수 표현
문자 표현은 표현 체계(크게 아스키코드, 유니코드로 나눌 수 있고 결과적으로는 인코딩 방식에 의해 정해짐)에 따라서 하나의 문자를 표현하는데 사용되는 메모리 공간이 다른데 정수는 특정 하나의 정수를 표현하는데에 32비트를 사용한다.
책에서는 이 부분에서 양수와 음수 표현 방식과 덧셈, 뺄셈이 2진법에서 어떤식으로 계산 되는지에 대해서 다루고 있고 이걸 굳이 정리할 필요는 없어 보인다.
실수 표현
하나의 실수에 대해서 4바이트 또는 8바이트를 사용한다.
불 대수와 디지털 논리
Last updated