본문 바로가기
JAVA

[Java 문제] 127 + 1 = ?

by 김ㅋㅋㅋ 2020. 12. 29.

문제 : 

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

댓글