30번째줄에서 i는 0~9인데 i-'0'을 char로 ok함수에 넣으십니다.
존재하지 않는 char이죠.
2529번 - 부등호
간단합니다!
char는 아스키코드표를 기준으로 하고, int는 그냥 정수이죠.
[0]이라는 숫자를 나타내면 int는 그냥 0이고 char는 아스키코드표에서 '0' 입니다.
그럼 문자 '0'도 아스키코드표에서 0번째에 있으면 좋겠는데,
아스키코드표 0번 인덱스의 값은 null이고, '0'은 아스키코드표에서 48번 인덱스에 있습니다.
--
그리고 48~57번 인덱스에 걸쳐 '0'~'9'가 차례대로 들어가있습니다.
따라서 '0' 이라고 하면 이건 사실 프로그램은 48로 바꿔서 인식하고 있는겁니다.
그럼 '0' - 48 = 0 이 되겠죠.
근데 48번이라고 외우고 다니기 귀찮잖아요?
그러니 '0' - '0' = 48 - 48 = 0이 되는겁니다.
그리고 숫자들이 전부 순서대로 들어가있으니
'5'-'0' = 53 - 48 = 5 이런식이 되는겁니다.
--
만약 아스키코드표에서 '0'~'9'가 순서대로 들어있지 않았다면 이런식으로 하지 않았겠죠.
--
비슷한 방식으로 'a'~'z' = 96~122 (숫자 몰라도 됨)
'A'~'Z' = 65~90 입니다.
즉, 'A' + 31을 하면 'a'가 되겠죠?
그럼 대문자 + 31 = 소문자 이런식으로 되는겁니다.
근데 31을 외울순 없잖아요? 그러니
char upperCase = 'A';
char lowerCase = upperCase + 'a'-'A';
이게 대문자를 소문자로 바꾸는것이고, 'A'-'a'를 더하면 소문자를 대문자로 바꾸겠죠.
--
결론은 한마디로 아스키코드표 몇번 인덱스에 뭐가있는지 외우고 다니기 귀찮으니
+ 또는 -에 문자를 넣어서 연산하는겁니다.
가끔 보시면 그냥 '0' - 48 이런식으로 쓰시는분들도 많이 계십니다.
댓글을 작성하려면 로그인해야 합니다.
wjavm2 4년 전
런타임에러 왜나는지 정말 모르겠어요.. 제발 봐주세요ㅠㅠㅠ