
가장 기초적인 부분, 외워야 하는 키워드 정리
32bit vs 64bit
bit 와 Byte
비트는 바이너리 디지트의 약자로 0과 1만을 나타낼 수 있는 신호(디지털 표현)를 나타내는 최소 단위입니다.
바이트는 8개의 비트로 구성된 정보의 기본 단위입니다. 알파벳이나 숫자를 한 개 저장할 수 있습니다.
Word (워드)
하나의 명령어로 저장 장치로부터 레지스터에 옮겨 놓을 수 있는(실행가능한) 데이터의 처리 단위를 뜻합니다.
메모리에서 레지스터, 혹은 산술 논리 장치(ALU arithmetic and logical unit) 를 통해 데이터를 조작할 때 한 번의 명령어로 처리될 수 있는 최대 데이터 크기가 곧 처리 단위가 됩니다.
32bit / 64bit
32bit와 64bit 모두 해당 단위 머신(CPU)의 기본 데이터 처리 단위(워드)가 32비트와 64비트라는 뜻입니다. 즉, 컴퓨터가 한 번에 처리할 수 있는 용량이 32비트 컴퓨터는 4바이트, 64비트 컴퓨터는 8바이트 단위로 끊어 데이터를 처리합니다.
시스템적 차이로는 크게 1) 범용 레지스터 크기 차이 2)메모리 주소 공간 크기 차이와 3)실행 가능한 응용 프로그램 종류의 차이가 있습니다. 32비트 프로세스의 범용 레지스터는 4바이트(32비트), 64비트 프로세스의 범용 레지스터는 8바이트(64비트)입니다.
따라서 메모리 주소 공간 또한 차이가 납니다. 32비트는 2의 32승, 약 4GB만큼의 메모리 주소 공간을 갖습니다. 64비트는 2의 64비트, 원칙적으로 약 18엑사바이트만큼의 주소 공간을 갖지만 실제로는 하위 48비트 만큼의 메모리 공간을 사용합니다. 나머지 공간은 addressing mode범위라고 합니다.
32bit는 레지스터가 8바이트만큼의 정보를 담을 수 없는데, 64비트 체제에서 사용될 것을 전제로 제작한 응용프로그램이 8바이트 단위로 연산을 처리하려 하기 때문에 64비트 응용 프로그램을 사용할 수 없습니다. 반대로 64비트 머신은 32비트 응용 프로그램을 사용할 수 있습니다. 윈도우의 경우 program files(x86) 폴더에 32bit 응용프로그램이 설치되어있다. (32bit: x86/ 64bit: x64)
2's complement, 1's complement (2의 보수, 1의 보수)
aka. 컴퓨터가 음수를 다루는 방법
1의 보수와 2의 보수는 컴퓨터가 음수를 다루는 계산 방법입니다.
CPU의 산술연산장치는 기 사칙연산시 덧셈만 활용할 수 있기에, 뺄셈 계산 시 덧셈 형식으로 뺄셈을 계산해야 합니다. 이때 뺄셈으로 빼지는 숫자를 음수 형태로 바꾸어 주어야 합니다. 여기서 컴퓨터는 2진법을 사용하므로, 빼어지는 수 n와 더했을 때 0이 되는 수 x가 n의 2의 보수가 됩니다.
1의 보수는 주어진 수를 2진법으로 변환한 뒤, 0과 1을 반전시켜 얻습니다.
2의 보수는 1의 보수에 1을 더해 얻습니다.
컴퓨터는 n개의 비트를 이용하여 2의 n승 개의 정수만 표현할 수 있습니다. 하지만 정수 연산에는 음과 양의 기호 표기 또한 필요하기에, 첫번째 비트를 활용해 기호를 표기합니다. 맨 앞의 비트가 0일 때에는 양수, 1일 때에는 음수를 뜻합니다.
4비트(4자리의 0/1 표시 자리)의 수일 경우, 2의 보수 값은 다음과 같습니다.
10진수 | 2의 보수 |
-8 | 1000 |
-7 | 1001 |
-6 | 1010 |
-5 | 1011 |
-4 | 1100 |
-3 | 1101 |
-2 | 1110 |
-1 | 1111 |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
위 표의 경우에는 부호 있는(signed) 정수이고, -8에서 7까지의 수를 표기합니다. 맨 앞자리의 비트를 부호 표기에 할당하기 때문입니다.
bit 수
|
4bit
|
8bit
|
16bit
|
32bit
|
부호 없는 정수
|
0~15
|
0~255
|
0~65535
|
0~4,294,967,296
|
부호 있는 정수
|
-8 ~ +7
|
-128 ~ + 127
|
-32,768 ~ +32767
|
-2,147,483,648 ~ +2,147,483,647
|
음수 3을 8비트로 표기하는 방법
음수 3을 8비트로 표기하려면 정수 3을 2의 보수로 변환하여 표기합니다.
1) 3을 이진법 수로 변환합니다. 8비트이므로 총 8자리로 표기할 수 있습니다. 0000 0011 이 됩니다.
2) 이를 1의 보수로 표현합니다. 각 비트의 0과 1을 반전시켜줍니다. : 1111 1100이 됩니다.
3) 여기에 1을 더해 2의 보수를 만듭니다: 1111 1101
Q 단순히 맨 앞 bit만 0(양수)/1(음수) 표기를 따라주면 되지 않나요?
3을 예시로 들자면, 위와 같은 방법으로 -3은 1000 0011 으로 표기될 수 있습니다. 그러나 이 수를 가지고 다른 연산을 하는 순간 2의 보수 방법을 사용하므로 값이 오염되어 원하지 않은 결과를 야기합니다.
실수 표현법
컴퓨터가 실수를 표현하는 방식으로 고정 소수점과 부동 소수점 방법이 있으며 그 특징을 고려해서 선택해야 합니다.
고정 소수점(fixed point) 방식은 실수를 정수부와 소수부로 나누어 표현합니다. 각 부의 비트 수는 고정되어 있기에, 계산 과정에서 발생할 수 있는 오차를 줄일 수 있습니다. 그러나 너무 큰 수나 너무 작은 수는 표현하기 어렵습니다. 정확도는 높으나 표현할 수 있는 범위가 제한됩니다. 이런 방식은 정밀 계산이 필요한 계산에서 사용됩니다.

부동 소수점(floating point)은 실수를 가수부와 지수부로 나누어 표현합니다. 표현할 수 있는 수의 범위는 넓으나 정밀도가 낮을 수 있습니다. 실수를 이진법으로 변환하는 과정에서 무한 소수가 발생할 수 있기 때문이며 오차가 날 가능성이 큽니다. 따라서 넓은 범위의 수를 처리할 때 주로 사용됩니다.(게임, 대규모 계산 등)

Reference
32bit vs 64bit
Why do x86-64 systems have only a 48 bit virtual address space?
https://www.howtogeek.com/129178/why-does-64-bit-windows-need-a-separate-program-files-x86-folder/
2's complement, 1's complement
1’s and 2’s complement of a Binary Number
Decimal/Two’s Complement Converter
'공부기록 > CS' 카테고리의 다른 글
[TIL][CS 기초] jpg, png, gif / 픽셀 | 유니코드 / UTF-8 (0) | 2024.03.27 |
---|---|
[TIL][CS 기초] CPU vs GPU | SSD, HDD (0) | 2024.03.11 |
[TIL][Fri][CSAPP] ch 6. The memory hierachy (0) | 2023.11.10 |
[TIL][CS기초] Compile | Compiler, Interpreter | Type System | Typing :: Static & Dynamic (0) | 2023.11.01 |
[TIL][Tue] [CSAPP/CH.3] Machine Programming 1: Basics (0) | 2023.10.31 |

가장 기초적인 부분, 외워야 하는 키워드 정리
32bit vs 64bit
bit 와 Byte
비트는 바이너리 디지트의 약자로 0과 1만을 나타낼 수 있는 신호(디지털 표현)를 나타내는 최소 단위입니다.
바이트는 8개의 비트로 구성된 정보의 기본 단위입니다. 알파벳이나 숫자를 한 개 저장할 수 있습니다.
Word (워드)
하나의 명령어로 저장 장치로부터 레지스터에 옮겨 놓을 수 있는(실행가능한) 데이터의 처리 단위를 뜻합니다.
메모리에서 레지스터, 혹은 산술 논리 장치(ALU arithmetic and logical unit) 를 통해 데이터를 조작할 때 한 번의 명령어로 처리될 수 있는 최대 데이터 크기가 곧 처리 단위가 됩니다.
32bit / 64bit
32bit와 64bit 모두 해당 단위 머신(CPU)의 기본 데이터 처리 단위(워드)가 32비트와 64비트라는 뜻입니다. 즉, 컴퓨터가 한 번에 처리할 수 있는 용량이 32비트 컴퓨터는 4바이트, 64비트 컴퓨터는 8바이트 단위로 끊어 데이터를 처리합니다.
시스템적 차이로는 크게 1) 범용 레지스터 크기 차이 2)메모리 주소 공간 크기 차이와 3)실행 가능한 응용 프로그램 종류의 차이가 있습니다. 32비트 프로세스의 범용 레지스터는 4바이트(32비트), 64비트 프로세스의 범용 레지스터는 8바이트(64비트)입니다.
따라서 메모리 주소 공간 또한 차이가 납니다. 32비트는 2의 32승, 약 4GB만큼의 메모리 주소 공간을 갖습니다. 64비트는 2의 64비트, 원칙적으로 약 18엑사바이트만큼의 주소 공간을 갖지만 실제로는 하위 48비트 만큼의 메모리 공간을 사용합니다. 나머지 공간은 addressing mode범위라고 합니다.
32bit는 레지스터가 8바이트만큼의 정보를 담을 수 없는데, 64비트 체제에서 사용될 것을 전제로 제작한 응용프로그램이 8바이트 단위로 연산을 처리하려 하기 때문에 64비트 응용 프로그램을 사용할 수 없습니다. 반대로 64비트 머신은 32비트 응용 프로그램을 사용할 수 있습니다. 윈도우의 경우 program files(x86) 폴더에 32bit 응용프로그램이 설치되어있다. (32bit: x86/ 64bit: x64)
2's complement, 1's complement (2의 보수, 1의 보수)
aka. 컴퓨터가 음수를 다루는 방법
1의 보수와 2의 보수는 컴퓨터가 음수를 다루는 계산 방법입니다.
CPU의 산술연산장치는 기 사칙연산시 덧셈만 활용할 수 있기에, 뺄셈 계산 시 덧셈 형식으로 뺄셈을 계산해야 합니다. 이때 뺄셈으로 빼지는 숫자를 음수 형태로 바꾸어 주어야 합니다. 여기서 컴퓨터는 2진법을 사용하므로, 빼어지는 수 n와 더했을 때 0이 되는 수 x가 n의 2의 보수가 됩니다.
1의 보수는 주어진 수를 2진법으로 변환한 뒤, 0과 1을 반전시켜 얻습니다.
2의 보수는 1의 보수에 1을 더해 얻습니다.
컴퓨터는 n개의 비트를 이용하여 2의 n승 개의 정수만 표현할 수 있습니다. 하지만 정수 연산에는 음과 양의 기호 표기 또한 필요하기에, 첫번째 비트를 활용해 기호를 표기합니다. 맨 앞의 비트가 0일 때에는 양수, 1일 때에는 음수를 뜻합니다.
4비트(4자리의 0/1 표시 자리)의 수일 경우, 2의 보수 값은 다음과 같습니다.
10진수 | 2의 보수 |
-8 | 1000 |
-7 | 1001 |
-6 | 1010 |
-5 | 1011 |
-4 | 1100 |
-3 | 1101 |
-2 | 1110 |
-1 | 1111 |
0 | 0000 |
1 | 0001 |
2 | 0010 |
3 | 0011 |
4 | 0100 |
5 | 0101 |
6 | 0110 |
7 | 0111 |
위 표의 경우에는 부호 있는(signed) 정수이고, -8에서 7까지의 수를 표기합니다. 맨 앞자리의 비트를 부호 표기에 할당하기 때문입니다.
bit 수
|
4bit
|
8bit
|
16bit
|
32bit
|
부호 없는 정수
|
0~15
|
0~255
|
0~65535
|
0~4,294,967,296
|
부호 있는 정수
|
-8 ~ +7
|
-128 ~ + 127
|
-32,768 ~ +32767
|
-2,147,483,648 ~ +2,147,483,647
|
음수 3을 8비트로 표기하는 방법
음수 3을 8비트로 표기하려면 정수 3을 2의 보수로 변환하여 표기합니다.
1) 3을 이진법 수로 변환합니다. 8비트이므로 총 8자리로 표기할 수 있습니다. 0000 0011 이 됩니다.
2) 이를 1의 보수로 표현합니다. 각 비트의 0과 1을 반전시켜줍니다. : 1111 1100이 됩니다.
3) 여기에 1을 더해 2의 보수를 만듭니다: 1111 1101
Q 단순히 맨 앞 bit만 0(양수)/1(음수) 표기를 따라주면 되지 않나요?
3을 예시로 들자면, 위와 같은 방법으로 -3은 1000 0011 으로 표기될 수 있습니다. 그러나 이 수를 가지고 다른 연산을 하는 순간 2의 보수 방법을 사용하므로 값이 오염되어 원하지 않은 결과를 야기합니다.
실수 표현법
컴퓨터가 실수를 표현하는 방식으로 고정 소수점과 부동 소수점 방법이 있으며 그 특징을 고려해서 선택해야 합니다.
고정 소수점(fixed point) 방식은 실수를 정수부와 소수부로 나누어 표현합니다. 각 부의 비트 수는 고정되어 있기에, 계산 과정에서 발생할 수 있는 오차를 줄일 수 있습니다. 그러나 너무 큰 수나 너무 작은 수는 표현하기 어렵습니다. 정확도는 높으나 표현할 수 있는 범위가 제한됩니다. 이런 방식은 정밀 계산이 필요한 계산에서 사용됩니다.

부동 소수점(floating point)은 실수를 가수부와 지수부로 나누어 표현합니다. 표현할 수 있는 수의 범위는 넓으나 정밀도가 낮을 수 있습니다. 실수를 이진법으로 변환하는 과정에서 무한 소수가 발생할 수 있기 때문이며 오차가 날 가능성이 큽니다. 따라서 넓은 범위의 수를 처리할 때 주로 사용됩니다.(게임, 대규모 계산 등)

Reference
32bit vs 64bit
Why do x86-64 systems have only a 48 bit virtual address space?
https://www.howtogeek.com/129178/why-does-64-bit-windows-need-a-separate-program-files-x86-folder/
2's complement, 1's complement
1’s and 2’s complement of a Binary Number
Decimal/Two’s Complement Converter
'공부기록 > CS' 카테고리의 다른 글
[TIL][CS 기초] jpg, png, gif / 픽셀 | 유니코드 / UTF-8 (0) | 2024.03.27 |
---|---|
[TIL][CS 기초] CPU vs GPU | SSD, HDD (0) | 2024.03.11 |
[TIL][Fri][CSAPP] ch 6. The memory hierachy (0) | 2023.11.10 |
[TIL][CS기초] Compile | Compiler, Interpreter | Type System | Typing :: Static & Dynamic (0) | 2023.11.01 |
[TIL][Tue] [CSAPP/CH.3] Machine Programming 1: Basics (0) | 2023.10.31 |