본문 바로가기

자바 프로그래밍/2장. 값과 변수

1. 값의 종류와 표현방법

반응형

1. 값의 종류와 표현방법

 

자바에서 제공하는 값의 종류를 크게 분류하면 다음과 같다.

 

-정수값

-실수값

-문자값

-진리값

 

이 중에서 정수값은 진법이나 크기에 따라서 그리고 실수값은 지수사용이나 크기에 따라서 값을  표현하는 방법이 여러 가지가 있다. 제일 먼저 그 방법에 대해서 알아보도록 하자.

1-1 정수 값의 표현방법

우리가 수학에서 사용하는 정수는 일반적으로 다음처럼 10진수로 표현한 숫자를 사용한다.

 

26

 

그런데 컴퓨터 프로그래밍에서는 어떤 분야의 프로그램을 만드는냐에 따라서는 2수나 16진수 등 진법을 달리해서 숫자를 표현하는 경우도 있다.



그렇다면 자바는 진법의 숫자를 지원하는지와 그것을 지원한다면 어떤 방법으로 진법을 구분할 수 있는를 알아보도록 하자.

 

A) 진법에 따른 정수

 

26을 8진수로 변경하면 32이다. 그리고 2진수로 변경하면 11010이다. 그런데 이것을 아무런 표시도 없이 그냥 숫자만 덩그러니 나열하면 이 값들이 같은 값인지를 알 수가 없을 것이다.

 

  • 26
  • 11010
  • 32

 

그래서 수학에서는 다음처럼 진법을 표현하기 위해서 아래첨자를 이용한다.

 

  • 26(10)
  • 11010(2)
  • 32(8)

 

하지만 그런 표현을 프로그래밍 코드에서 사용하기에는 서식을 표현하는 것에 어려움이 있다. 그래서 자바에서는 다음처럼 좀 더 간단한 방법으로 진법을 표현한다.

 

  • 26
  • 032
  • 0b11010
  • 0x1A

 

숫자 앞에 아무것도 안써주면 10진수이고 숫자 앞에 Zero(0)를 덧붙이면 8진수, 0b를 덧붙이면 2진수 0x를 덧붙이면 16진수를 의미한다.

 

수학에서는 2진수, 4진수, 8진수 등 다양한 진법을 사용할 수 있지만 자바에서는 10진수, 8진수, 16진수만 지원했다. 하지만 최근에는 2진수까지 포함해서 총 4가지 진법을 지원한다.

 

진법 표현 예 설명
2 진법 0b32 숫자 앞에 0(zero)과 b을 사용
8 진법 032 숫자 앞에 0(zero)을 사용
10 진법 26 숫자 앞에 아무것도 사용하지 않음
16 진법 0x1A 숫자 앞에 0(zero)과 x를 사용



그런데 위와 같이 2진수나 16진수를 사용한다면 그 진법을 변환하는 방법을 알고 있어야 한다. 혹시나 학창시절에 배운 그 변환 방법이 기억나지 않는 독자들은 다음 절을 통해서 기억을 소환해보도록 하자.

 

1-2 진법 변환방법

진법을 변환하는 방법은 2진수를10진수로 변환하는 방법을 시작으로 10진수를 2진수, 8진수, 16진수로 변환하는 순서로 알아보도록 하자.

 

A) 정수값 2진수를 10진수로 변환하기

 

2진수를 10진수로 읽는 방법은 아주 간단하다.  설명에 앞서서 우선 다음 표에서 물음표에 들어갈 값을 유추해 보자.

 

 

2진수와 10진수의 관계표

 

여덟 자릿수의 2진수는 모두 0으로 구성되어 있고 1은 하나만 있다.  그 1이 2진수의 제일 아래에 위치해 있을 때 그 값은 10진수로 변환하면 20 인 1이다.

 

1이 한 칸씩 앞으로 올라갈 때마다 그 값은 2배수로 커진다. 그 규칙을 이용해서 물음표에 해당하는 값을 유추해 보면 그 값은 25 으로  32이다.

 

이런 규칙으로 1이 하나뿐인 2진수는 10진수로 어렵지 않게 읽을 수 있다. 그렇다면 1이 여러 개인 2진수는 어떻게 10진수로 읽을 수 있을까? 예를 들어 다음과 같은 2진수 말이다.

 

00000101

 

이렇게 1이 여러 개가 있더라도 읽는 방법은 다르지 않다.  다만 약간의 덧셈을 할 수 있으면 그것으로 충분하다.

 

 0 0 0 0 0 0 0 0

 

위의 이진수는 모두 0이지만 각 자리마다 정해진 값이 있다.

 

128(0) + 64(0) + 32(0) + 16(0) + 8(0) + 4(0) + 2(0) + 1(0)

 

그런데 0 대신 1이 채워지는 곳이 있다면 그 위치의 값을 더하도록 한다. 그런 방법으로 앞에서 언급했던 2진수를 10진수로 읽어보도록 하자.

 

00000101

 

위의 숫자에서 1을 각각 읽어서 1의 수만큼 덧셈을 해보도록 하자.

 

 

비트 열 더하기

 

위의 그림은 이해를 돕고자 그림으로 그려본 것이지만 앞으로는 다음처럼 1이 있는 자리의 값만 바로 더해보도록 하자.

 

128(x 0) + 64(x 0) + 32(x 0) + 16(x 0) + 8(x 0) + 4(x 1) + 2(x 0) + 1(x 1)

 

위의 자리에서 1인 곳의 자리만 더하면 4 + 1 이다.

 

위와 같은 방법을 다음 2진수를 10진수로 읽어 보는 연습을 해보자.

 

00001101

 

앞에서 알려주었던 것처럼 1이 들어 있는 비트의 자리 값만 더한다. 그러면 8+ 4 + 1 즉  13이다.



B) 소수값 2진수를 10진수로 변환하기

 

이번에는 실수를 10진수로 변환 방법에 대해서 알아보도록 하자. 그것이 가능하려면 소수부를 표현하는 방법을 알고 있어야 한다.

 

2진수의 소수부는 소수점을 기준으로 1의 위치가 오른쪽로 한칸 옮겨질 때마다 1/2씩 작아진다. 

 

 

정수와 소수의 자리에 대한 패턴

 

우선 위의 표를 참고하면서 다음 2진수의 소수부를 10진수로 읽어 보자.

 

0000.1010

 

위의 2진수는 소수부에 1이 두 군데 있는데, 정수 때처럼 1 위치의 값들을 더하면 10진수를 얻을 수 있다.

 

 

소수점 이하 비트 열 더하기

 

위와 같은 방법으로 연습을 한번 더 해보도록 하자.

 

0101.0101

 

이미 앞에서 다루었던 것처럼 각 자리마다의 값은 다음과 같다.

 

8(0) + 4(1) + 2(0) + 1(1) + 0.5(0) + 0.25(1) + 0.125(0) + 0.0625(1)

 

이 중에서 1 위치의 값만 추려내도록 하자.

 

4 + 1 + 0.25 + 0.0625

 

이 값들을 더하면 그 결과는 5.3125이 된다.

 

C) 10진수를 2진수로 변환하기

 

10진수를 2진수로 읽는 방법은 10진수가 다음 2진수의 위치값을 더해서 만들어진다는 점을 이해하는 것이 중요하다.

 

128(0) + 64(0) + 32(0) + 16(0) + 8(0) + 4(0) + 2(0) + 1(0) 

 

예를 들어서 19(10)를 2진수로 바꾸고 싶다면 위의 위치에서 더 해서 19를 만들 수 있는 위치에 1을 쓰는 것이다.

 

제일 먼저 19를 넘지 않는 수 중에서 19에 가장 가까운 위치에 1을 설정해보자.

 

128(0) + 64(0) + 32(0) + 16(1) + 8(0) + 4(0) + 2(0) + 1(0)

 

그리고 나머지 숫자인 3을 만들 수 있는 위치에 1을 설정한다.

 

128(0) + 64(0) + 32(0) + 16(1) + 8(0) + 4(0) + 2(1) + 1(1)

 

이제 위의 수에서 0과 1만 남기면 남기면 그 결과는 다음이 된다.

 

00010011

 

D) 2진수를 16진수로 변환하기

 

진법이란 한 자리에 몇개의 숫자를 표현하느냐에 따라서 10진수, 16진수 등으로 나눈다. 즉 한 자리에 4개의 숫자를 표현하면 4진수, 한 자리에 10개의 숫자를 표현하면 10진수가 된다.

 

16진수는 한 자리에 16개의 숫자를 표현하기 위해서 다음 16개의 기호를 사용한다.

 

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

 

2진수는 한 자리에 2개의 숫자를 표현하기 때문에, 4진수로 바꿀 때는 다음처럼 두 자리를 한 자리로 묶으면 4진수가 된다.

 

 

 

2진수를 두 자리씩 묶으면 8진수가 된다. 

 

 

마찬가지로 네 자리씩 묶으면 16진수가 된다.

 

 

 

반응형