문제 :
byte b = 127;
b += 1;
System.out.println(b);
byte 타입인 b를 127로 초기화하고 1을 더해주면 몇이 출력 될까?
128?
byte 타입 범위가 -128 ~ 127까지니까 에러?
결과는? -128이다
왜 -128이 나왔을까?
byte 타입은 8bit이며 맨 앞의 부호비트와 정수의 크기를 나타내는 나머지 7bit로 이루어져있다.
따라서 -128(1000 0000) ~ 127(0111 1111)까지의 숫자를 표현할 수 있다.
위의 바이너리 형식으로 보면 127은 '0111 1111'이 되고
여기에 +1 을 해주면 '1000 0000'이 된다.
이 '1000 0000'는 10진수로 -128이기 때문에 위 코드의 결과가 -128이 나오게 된다.
※ 이와같은 특징 때문에 byte로 선언된 숫자를 1씩 계속 증가시켜주면
0, 1, 2, 3, ... 126, 127, -128, -127 ... -2, -1(1111 1111), 0(오버플로우 발생하면서 다시 0000 0000), 1, 2, 3 반복된다.
이는 부호가 있는 정수형 타입인 int도 정수의 크기가 커질 뿐 마찬가지다.
'JAVA' 카테고리의 다른 글
Try with resources, 자원 자동 해제하기 (0) | 2022.07.01 |
---|---|
JAVA IP Address Split(".") (0) | 2021.05.11 |
댓글