JAVA 시작하기 - 컴퓨터가 데이터를 표현하는 방법

Big Jay·2023년 5월 11일
0

Java 시작하기

목록 보기
2/14
post-thumbnail

컴퓨터에서 수를 표현하는 방법

우리가 사용하는 모든 데이터는 컴퓨터 내부에서 0과 1로 이루어져 있다.
이유는 컴퓨터 내부를 굿성하는 반도체가 데이터를 0과 1로만 표현할 수 있기 때문이다. 0과 1로 표현할 수 있는 단위를 비트(bit)라고 하며, 8비트가 모이면 1바이트(byte)가 된다. 그렇다면 실제로 사람이 사용하는 숫자는 어떻게 표현이 될까?

1. 10진수와 2진수

일상 생활에서 사용하는 숫자는 0부터 9까지 한 자릿수이고 10부터는 두 자릿수가 된다. 이를 10진수라 한다. 하지만 컴퓨터는 0과 1로 표현해야하며 이 때 사용하는 것이 2진수이다.

10진수2진수
00
11
210
311
4100
5101
6110
7111
81000
91001
101010

컴퓨터는 숫자 뿐만 아니라 문자도 2진수로 표현하는데 A는 숫자 65로 표현하도록 약속 되어있다. 그렇다면 A는 숫자 65이고 이를 2진수로 표현하면 1000001로 표현되고, 이 값을 A 문자의 아스키(ASCII)값이라고 한다. 모든 문자는 컴퓨터가 이해할 수 있는 아스키 값이 미리 정해져 있다.

아스키(ASCII)란?
American Standard Code Information Interchange의 약어로
미국 표준 협회(ANSI)가 제정한 규칙으로 영문, 숫자, 특수 문자를
8비트 값의 수로 미리 정의해 놓았다.

비트로 표현할 수 있는 수의 범위
컴퓨터는 몇 비트로 표현하느냐에 따라 수의 범위를 결정한다.
비트 수가 n개일 때 2진수로 나타낼 수 잇는 숫자의 개수는 2ⁿ개 이다.
비트가 한 개면 2개(2¹)의 수를 표현할 수 있으므로 범위는 0~1이고,
비트가 두 개면 4개(2²)의 수를 표현할 수 있으므로 범위는 0~3이다.

한 개의 비트로 나타낼 수 있는 범위 -> 0, 1 (0~1)
두 개의 비트로 나타낼 수 잇는 범위 -> 00, 01, 10, 11 (0~3)

2진수, 16진수, 8진수

Java는 2진수, 8진수, 16진수를 사용할 수 있다.
2진수는 비트 값을 그대로 표현할 수 있지만 길이가 너무 길어 불편하므로 8진수나 16진수로 바꿔서 사용하면 간단하게 표현할 수 있다. 8진수를 2진수로 표현하기 위해 3개의 비트가 필요하고 16진수는 4개의 비트가 필요하다.

프로그램에서 2진수를 사용할 때는 숫자 앞에 0B를 붙이고, 8진수를 사용할 때는 0, 16진수를 사용할 때는 OX를 붙이며, 소문자 b와 x도 사용할 수 있다.
예) 10진수는 10을 2진수 '0B1010', 8진수 '012', 16진수 '0XA'로 표현할 수 있다.

부호 있는 수를 표현하는 방법

부호 또한 0과 1로 표현한다. 부호를 나타내는 비트는 맨 앞에 붙이며 부호 비트(Most Significant Bit; MSB)라고 부른다. 부호 비트가 0이면 양수, 1이면 음수다.

8비트로 5라는 숫자를 표현

00000101
부호비트(MSB)

이 때 -5를 표현 하려면 부호 비트만 바꾸면 될까?

10000101

확인 방법으로 5+(-5)를 더해보면 된다.

00000101 + 10000101 = 10001010

2진수의 덧셈은 10진수의 덧셈과 크게 다르지 않다.

위 결과를 보면 0이 나오지 않는다. 컴퓨터에서 표현할 -5는 5와 더했을 때 0이 되는 값이어야한다. 이는 프로그래밍에서 2의 보수라 한다.

2의 보수

보충해 주는 수로, 어떤 특정한 10진수 N이 있을 때 3에 대한 N의 보수라고 하면 3과 어떤 수를 합하여 N이 되는 수를 의미한다.

2진수에서 2의 보수는 무엇일까?

2진수에서의 2의 보수는 더해서 2, 10(일영)이 되는 수이다. 즉 맨 왼쪽 한 비트가 1로 증가하고 나머지는 0이 된다.

0011 + 1101 = 0000
// 4비트 컴퓨터이므로 맨 앞의 1비트는 사라지는데 이를 '트렁게이트(truncate)'된다고 한다.
// 0011에 대한 2의 보수는 0011에 수를 더하여 0이 되므로 1101이 보수인 셈이다.
profile
안녕하세요.

0개의 댓글