완료됨
해법에 관한 질문

왜 int 배열의 최대치에서 +1을 한 2147483648에서는 나누었을때 -8이 되지만
그것보다 초과할 경우엔 안되는 건가요?

#시스템해킹
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
avatar
Sechack
2024 Invitational Contenders

2147483647이 int의 최대치입니다. 여기서 1을 더하게 되면 자료형이 담을 수 있는 크기를 초과하게 됩니다. 따라서 오버플로우가 일어나서 int의 최소값인 -2147483648이 되게 됩니다. index는 -2147483648인데 이걸 양수로 만들 방법이 없습니다. index = -index로 양수로 만드려고 하더라도 2147483648이 되면서 또다시 오버플로우가 일어나게 됩니다. 따라서 다시 index는 -2147483648가 됩니다. (오버플로우가 일어나면 왜 저렇게 되는지는 부호비트와 관련이 있습니다.) -2147483648 % 10 = -8이므로 -8이 되게 되는겁니다.

만약에 그것보다 초과할경우에는 변수에 (int의 최소값 + 초과한 값)이 저장되게 됩니다. 부호 있는 자료형이 사용하는 부호비트라는것을 알게 되면 왜 이런일이 일어나는지 아실 수 있을겁니다.

2021.01.26. 20:28