2021. 5. 25. 18:00ㆍJava
10진법과 2진법
우리는 일상속에서 주로 사용하는 것은 10진법이다. 2진법을 알지못하면 컴퓨터의 동작원리나 데이터 처리방식을 온전히 이해할 수 없다.
지금까지 변수에 값을 저장하면 10진수로 저장되는 것처럼 설명을 하였지만, 컴퓨터는 2진수(0과1)밖에 모르기 때문에 아래의 오른쪽과 같이 2진수로 바뀌어 저장된다. 2진수 11001은 10진수로 25이다.
int age = 25;
age = 25 → age = 11001
이처럼 2진법은 0과 1로만 데이터를 표현하기 떄문에 10진법에 비해 많은 자리수를 필요로한다. 10진수 2와 같이 작은 숫자도 2진수로 표현하려면 2자리가 필요하다.
2진수한자리로는 1보다 큰 값을 표현 할 수 없기 떄문이다. 이것은 10진수에서 9보다 큰 수를 표현하기 위해서는 두자리의 10진수의 10진수가 필요한 것과 같다.
10진수 | 2진수 |
0 | 0 |
1 | 1 |
2 | 10 |
3 | 11 |
4 | 100 |
5 | 101 |
6 | 110 |
7 | 111 |
8 | 1000 |
그래서 2진수 1에 1을 더하면 2가아닌 10이 되고, 2진수 11에 1을 더하면 12가 아닌 100이된다. 10진수와 비교해보면 쉽게 이해가 될 것이다.
2진수 1 + 1 = 10, 11 + 1 = 100
10진수 9 + 1 = 10, 99 + 1 = 100
자리수가 많아지긴 해도 2진수를 10진수를 온전히 표현할 수 있다. 게다가 덧셈이나 뺼셈같은 연산도 10진수와 동일하다.
비트(bit)와 바이트(byte)
한 자리의 2진수를 비트(bit, binary, digit)라고 하며, 1 비트는 컴퓨터가 값을 저장할 수 있는 최소단위이다. 그러나 1비트는 너무 작은 단위 이기 떄문에 1비트 8개를 묶어서 바이트(byte)라는 단위로 정의해서 데이터의 기본 단위로 사용한다.
이 외에도 워드(word)라는 단위가 있는데, 워드는 CPU가 한 번에 처리할 수 있는 데이터의 크기를 의미한다. 워드의 크기를 4바이트라고 했지만 사실 워드의 크기는 CPU의 성능에 따라 달라진다. 예를 들어 32비트 CPU에서 1워드는 32비트(4바이트)이고, 64비트 CPU에서는 64비트(8바이트)이다.
niddle - 4bit, 16진수 1자리(2진수 4자리)를 저장할 수 있는 단위.
아래의 표는 1~4비트로 표현 할 수 있는 값의 개수를 모두 나열한 것으로 1비트(2진수 1자리)로 0과1, 모두 2개(2의1승)의 값을, 2비트(2진수 2자리)로는 4개(2의2승)의 값을 표현할 수 있다는 것을 알 수 있다.
이를 일반화하면, n비트로 2의n승개의 값을 표현할 수 있다. 그리고 n비트로 10진수를 표현한다면, 표현가능한 10진수의 범위는 0 ~ 2의n승 -1 이 된다. 표의 맨오른쪽 표를 보면, 4비트로 모두 16개(2의4승)의 값을 표현할 수 있으며, 4비트로 10진수를 표현한다면 범위가 0 ~ 15(0 ~ 2의4승 -1)라는것을 직접 확인 할 수 있다.
n비트로 표현할 수 있는 10진수
값의 개수: 2에n승
값의 범위: 0~2의n승 - 1