

-'0'는 아스키코드 값의 차이를 이용하여 문자(char)를 정수(int)로 변환하기 위해 사용된다.
아스키코드에서 숫자 문자 '0'~'9'는 각각 48~57의 값을 가진다. 예를 들어:
즉, 문자 '1'을 정수 1로 변환하려면 '1' - '0'을 계산한다:
'1'(49) - '0'(48) = 1이 방식을 사용하면 문자 배열에 들어있는 숫자 문자를 정수로 변환할 수 있다. 따라서 sum += b[i] - '0'는 각 문자를 숫자로 변환한 값을 누적하는 작업이다.
sum = b[i] + sum - '0';
위 코드는 b[i]의 문자 값을 숫자로 변환한 후 sum에 더한다.
-'0'을 하지 않으면, 문자(char)의 아스키코드 값 그대로 계산되기 때문에 원하는 결과와 완전히 다른 값이 나올 수 있다.
만약 -'0'을 하지 않고 아래와 같은 코드를 실행했다고 가정하자:
sum = b[i] + sum;
여기서 입력이 "123"이라면:
'1'의 아스키코드 값은 49 '2'의 아스키코드 값은 50'3'의 아스키코드 값은 51따라서, 계산 과정은 다음과 같이 진행된다:
sum = 0 + 49 → sum = 49sum = 49 + 50 → sum = 99sum = 99 + 51 → sum = 150결과적으로, 문자의 숫자 값이 아니라 아스키코드 값의 합을 계산하게 된다. 이 결과는 우리가 원래 의도한 숫자의 합(1 + 2 + 3 = 6)과 전혀 다르다.
-'0'을 하지 않으면:
'1', '2', '3' 등을 정수 1, 2, 3으로 변환하지 못한다.따라서, 입력된 숫자 문자열의 각 문자를 정확히 정수로 변환하려면 반드시 -'0'이 필요하다!