원시타입
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 |
char | 16비트 | 0~65535 | '\u0000' |
byte | 8비트 | -128 ~ 127 | 0 |
short | 16비트 | -32768 ~ 32767 | 0 |
int | 32비트 | -2147483648 ~ 2147483647 | 0 |
long | 64비트 | -9223372036854775808 ~ 9223372036854775807 | 0L |
float | 32비트 | 1.4E-45 ~ 3.4028235E38 | 0.0f |
double | 64비트 | 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 |