본문 바로가기

issue & tip

자바 원시타입

반응형

원시타입


Java Data Type
ㄴ Primitive Type
    ㄴ Boolean Type(boolean)
    ㄴ Numeric Type
        ㄴ Integral Type
            ㄴ Integer Type(short, int, long)
            ㄴ Floating Point Type(float, double)
        ㄴ Character Type(char)
ㄴ Reference Type
    ㄴ Class Type
    ㄴ Interface Type
    ㄴ Array Type
    ㄴ Enum Type
    ㄴ etc.


int, boolean, double 같은 각각의 기본 타입을 원시타입이라고 한다.

원시 타입들은 항상 값이 있는 상태로 null이 될수 없다.

원시 타입을 정의할 때 값이 할당되지 않았다면 그 변수는 기본값


자료형비트 수범위

 기본값

boolean

1비트

True or False false
char16비트0~65535 '\u0000'
byte8비트-128 ~ 127
short16비트-32768 ~ 32767

0

int32비트-2147483648 ~ 2147483647

0

long64비트

-9223372036854775808 ~ 9223372036854775807

0L

float

32비트1.4E-45 ~ 3.4028235E38 0.0f
double64비트

4.9E-324 ~ 1.7976931348623157E308

 0.0d


원시타입을 적절한 타입으로 변환

int value = Integer.MAX_VAULE;

long biggerValue = value + 1;


char타입을 제외하면 컴파일러는 해당 값을 저장하기 위해 상위 타입을 자동으로 사용할 수 있다.

int -> long

float -> double


하위 타입으로 명시적으로 타입 변환

long veryLargeNumber = Long.MAX_VALUE;

int fromLargeNumber = (int) veryLargeNumber;


short, int, long 타입의 2진수(binary) 값의 저장소는 메모리에서 2의 보수 값을 사용한다.


0 - 0000 0000

1 - 0000 0001

2 - 0000 0010


2의 보수 표현에서 양수에 대응하는 음수는 2진수의 기반의 NOT 비트연산을 적용하고 1을 더한다.

0000 00001 (1)-> 1111 1110 -> 1111 1111 (-1)


1111 1111 (-1) -> 0000 0000 -> 0000 0001 (1)

2의 보수를 표현을 사용하는 주된 이유는 0은 하나의 값만 존재, 즉 양수나 음수의 개념이 없다는 것

이는 시스템이 하나의 음수값을 저장할 수 있음을 의미.


가장작은 움수는 최상위 비트가 1이고 나머지는 0이다


-1 - 1111 1111

-2 - 1111 1110


-127 - 1000 0001

-128 - 1000 0000



1000 0000 을 음수화하려면 나머지 비트를 뒤집어 (0111 1111) 되고 월래 값으로 돌리려면 하나(1000 0000)를 더하면된다.

이런 경우 해당 값에 대응하는 양수는 존재하지 않는다.

따라서 이 값을 양수로 사용하고 싶으면 long 같은 상위 타입을 사용해야 한다.

또는 상한이 없는 BigInteger 타입을 사용해도 된다.


long의 가장 큰값은 9223372036854775807이다. 더 큰 숫자가  BigInteger 사용한다.

대신 연산자 add(), subtract(), multiply(), divide() 사용해야한다.


Integer.MAX_VALUE보다 크거나 Integer.MIN_VALUE보다 작은 값을 결과로 갖는 연산을 하려면 최하위 32비트만 사용하고 에러 값을 반환할 것이다. 오버플로라고 한다.


@Test

public void absoluteOfMostNegativeValue() {

final int mostNegative = Integer.MIN_VALUE;

final int negated = Math.abs(mostNegative);

assertFalse("No positive equivalent of Integer.MIN_VALUE", negated > 0);

}


반응형

'issue & tip' 카테고리의 다른 글

백세코딩 #소프트웨어 개발 방법론과 DevOps  (0) 2018.04.16
백세코딩 #개발자(이력과 회사)  (0) 2018.04.15
백세코딩#개발자  (0) 2018.04.13
Lombok 라이브러리  (0) 2018.03.31
자료구조 #리스트  (0) 2018.02.23