Java 진법 1

2021. 5. 25. 18:00Java

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

'Java' 카테고리의 다른 글

Java 진법 3  (0) 2021.05.27
Java 진법 2  (0) 2021.05.26
Java 상수 2  (0) 2021.05.15
Java 상수 1  (0) 2021.04.30
Java 화면에서 입력받기(Scanner)  (0) 2021.04.29