완료됨
해법에 관한 질문
왜 int 배열의 최대치에서 +1을 한 2147483648에서는 나누었을때 -8이 되지만
그것보다 초과할 경우엔 안되는 건가요?
#시스템해킹
작성자 정보
답변
1
Sechack
2024 Invitational Contenders
2147483647이 int의 최대치입니다. 여기서 1을 더하게 되면 자료형이 담을 수 있는 크기를 초과하게 됩니다. 따라서 오버플로우가 일어나서 int의 최소값인 -2147483648이 되게 됩니다. index는 -2147483648인데 이걸 양수로 만들 방법이 없습니다. index = -index로 양수로 만드려고 하더라도 2147483648이 되면서 또다시 오버플로우가 일어나게 됩니다. 따라서 다시 index는 -2147483648가 됩니다. (오버플로우가 일어나면 왜 저렇게 되는지는 부호비트와 관련이 있습니다.) -2147483648 % 10 = -8이므로 -8이 되게 되는겁니다.
만약에 그것보다 초과할경우에는 변수에 (int의 최소값 + 초과한 값)이 저장되게 됩니다. 부호 있는 자료형이 사용하는 부호비트라는것을 알게 되면 왜 이런일이 일어나는지 아실 수 있을겁니다.