컴퓨터의 음수 처리

honeyricecake·2022년 1월 29일
0

C언어공부

목록 보기
6/10

이를 찾아보게 된 이유

문자열을 이용한 백준 문제를 풀다가 314가 출력되어야 하는데
갤럭시s14가 출력되어 대체 왜 그러나 싶어 봤더니
문자열의 어느 칸에 '0'을 집어넣어야 하는데 집어넣지 않고 뛰어넘어
결과값이 '3'인 51이 아닌 -141이 나와서 s가 출력되었다.
그런데 나는 지금까지 음수처리법을
부호를 나타내는 비트 1개를 제외한 나머지는 양수 141과 같은줄 알았는데
-141에 아스키 코드 115인 s가 출력되어 이가 아님을 알고 왜 그런지 찾아보았다.

원리

그 원리는 일단 INT_MAX에 +1을 하면 -(INT_MAX + 1)가 출력되는 것에서 찾을 수 있는데

01111......1111 이 1이 더해져 10000....0000이 되었는데 -(INT_MAX + 1) 이 된 것이다.

또 여기서 + INT_MAX를 한 11111....1111은 -1인데

이렇게 된 이유는 0,1 부호처리를 제외하고는 대소비교를 일관되게 하기 위해서로 보인다.

그럼 1111.....1111 에서 -140을 하고 비트 8개를 보면 왜 s가 출력된지를 알 수 있는데
비트 8개는 11111111 즉, 255이고 255 - 140은 115이다.

따라서 아스키 코드 115인 s가 출력되는 것이다.

0개의 댓글