자바의 4가지 정수 자료형

- byte, short, int, long

- 정수를 표현하는데 사용되는 바이트 크기에 따라서 구분이 됨

 

ex) 12정도의 숫자를 저장한다고 하자.

일반적인경우라면 정수 변수를 저장하는데 있어서 int형을 사용하는것이 좋다.

(특별한 경우는 이따가 설명)

32bit 컴퓨터는 연산의 크기가 4byte이다

예를들면 2byte + 2byte라는 연산이 있다면 이것은 2byte짜리를 4byte로 형변환을 한 후

계산을 하게 된다.(기본 단위가 4byte이기 때문에.)

어떻게 보면 상당히 비효율적이게 보인다.

이유는 cpu가 4byte 연산만 할수 있는 설계로 되어있기 때문이다

(1,2,4 byte 연산이 가능하게 설계 하면 좀 느려지며 복잡해진다.)

 

작은 크기의 정수 저장에는 short? 아니면 int형 변수?

- CPU는 int형 데이터의 크기만 연산 가능하다.

- 때문에 연산 직전에 short 데이터는 int형 데이터로 자동변환이 된다

- 변환의 과정을 생략할 수 있도록 int를 선택한다.

 

그럼 short와 byte는 왜 필요한가?

 

특별한경우를 설명하면.

mp3 에 연산장치(CPU)가 있다

음원을 재생 시키는데는 연산의 속도보다 memory 가 중요하다

그러므로 메모리의 효율성을 높이기 위해 short와 byte를 사용한다.

(게임 캐릭터 같이 많은 데이터를 저장하는데에도 사용된다)

 

- 연산보다 데이터의 양이 중요시 되는 상황도 존재

- MP3 파일, 동영상 파일

- 데이터의 성격이 강하다면 short와 byte를 활용!

 

자바의 2가지 실수 자료형

- float, double

- float는 소수점 이하 6자리 , double은 12자리 정밀도

(정밀도에 따라서 무엇을 사용할 지 결정.)

실수 자료형의 선택 기준

- float와 double은 모두 매우 충분한 표현의 범위이다

- 이 둘의 가장 큰 차이점은 정밀도.

- 따라서 정밀도를 바탕으로 자료형을 결정한다.

- 일반적으로 double의 선택이 선호됨

 

 

실수의 e표기법과 16진수 8진수 표현의 예

 

 

 

보통 실수는 1.2x10^3 이렇게 사용하지만 우리는 타이핑 할때 지수를 표현할 수 없으므로

위와같이 사용한다

 

1.2x10^-3 = 1.2e-3

1.2x10^3 = 1.2e+3

 

정수

31 -> 10진수

0x31 -> 16진수 31

031 -> 8진수 31

 

※문자 자료형 char

 

 

 

컴퓨터는 1과 0밖에 모르니

1과0으로 된 숫자를 문자로 변환해야 한다

이것을 약속 해놓았는데 그것을 유니코드 라고 한다.

 

자바의 문자 표현

- 문자 하나를 2바이트로 표현하는 유니코드 기반으로 표현(전세계의문자를 모두 표현 가능 2^16이므로)

- 유니코

 

드는 전 세계의 문자를 표현할 수 있는 코드 집합

- 문자는 작은 따옴표로 표현한다.

ex)

int a = 1;    ->정수

char i = '1';    ->문자

- 문자는 char형 변수에 저장한다. 저장 시 실제로는 유니코드 값 저장

 

 

※'참'과 '거짓'을 표현하기 위한 자료형 : boolean

 

논리적인 표현을 위한 두 가지 약속

- true '참'을 의미하는 키워드

- false '거짓' 을 의미하는 키워드

 

키워드 true와 false 에 대한 좋은 이해

- 숫자의 관점에서 이해하려 들지 말자.

- 자바에서의 true와 false는 그 자체로 저장이 가능한 데이터이다.

- true 와 false의 저장을 위한 자료형 boolean이다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posted by 알콜
,

실수를 표현하는 방식은 오차를 동반한다

 

예를들어 2비트가 있다 가정하면

가지수는 총 00 01 10 11 총 4가지가 나온다.

실수도 1.1 1.2 1.3 1.4 4개밖에 표현을 못한다

하지만 1.1과 1.2 사이에 존재하는 모든 실수를 표현할 수 없다

2비트가아니고 1mb 1gb 가 있어도 완벽히 표현을 할 수 없다 

그래서 결론은 근사치로 표현할 수 밖에 없다.

이것은 java의 특징이 아니고 컴퓨터의 특징이다.

 

정리해보면

- 실수 표현의 문제점

1. 0과 1사이의 실수만 해도 그 수가 무한대이다.

2. 단순히 몇 바이트 정도로 모든 실수의 표현은 불가능 하다.                             

 

- 문제점에 대한 해결책

정밀도를 포기하고 대신에 표현할 수 있는 값의 범위를 넓히자.

 

그럼 실수는 사실상 어떻게 표기할까?

 

위 수식을 보면 표현할 수 있는 범위가 엄청 넓다.

이해하기 힘들면 m과 e에 임의의 숫자를 넣어서 변경된 값의 폭을 보자

 

■ 실수의 저장 및 참조 원리

 

double num1 = 2.0000001 이렇게 만든다 치면

+- 1.m x 2^e-127 이라는 수식을 사용해

m과 e에 2.0000001 에 최대한 가까운 수를 대입해 저 수를 얻어온다.

 

 

 

 

사진출처 : www.orentec.co.kr

 

 

 

Posted by 알콜
,

메모리공간이 할당되어서 메모리공간에 10을 저장할때 어떻게 저장되는지 알아보자

 

정수를 저장하고 참조하는 표현(방법)

 

-양수- 

1byte를 기준으로 설명해보면

맨 왼쪽비트(MSB : Mos Significant Bit)는 부호를 나타낸다

0 : 양수, 1 : 음수

나머지 7비트는 데이터의 크기를 이야기 한다(2진수)

2진수를 계산하면 16+8+1 = 25가 된다.

 

-음수-

한가지 예를들면

0 0000001    (+1) 이면

1 0000001    (-1) 이 아닐까 라고 생각할수 있는데 두개를 더해보면 0이 나오지 않는다

결론 : 음의정수 표현은 양의정수 표현과 다르다

 

 

1의 보수는 1을 0으로 0을 1로 반전시키는것이고

2의 보수는 반전시킨 후 1을 더한것이다

 

※ 음의정수표현 특징

- 양의정수 표현방식과 다르다.

- 양의정수와의 합이 0이되는 구조로 정의

- 2의 보수가 음의 정수 표현방식

 

 

 

 

출처 : www.orentec.co.kr

 

 

 

Posted by 알콜
,