1> 应该是字符转换为整数.
因为每个字符是以对应的 ASCII 码存储的, 而ASCII码是整数. 你可以这样理解,字符都是以整型数来存储的. 而像 0-9这些字符的ASCII码是连续的, 比如说: '0'字符的ASCII码如果是 20, 那么'1'的ASCII 码就是21 , 以些类推.
语句 int value= string[i]-'0'; 是将string 串中, 第i+1位字符(如果是数字字符)转换为对应的整形数. 就是说, 如果string[i] 是 '8', value 的最终值是数字 8;
2> 同理, 大写字母 的ASCII 码值是连续的('B'=='A' +1), 小写字母的ASCII码也是连续的( 'b' == 'a' +1).
语句: char ch = c-'a' + 'A';
可以这样理解, 如果c是小字字母, 那么ch的值是它所对应的大写字母.
c-'a'得出c在小字字母表中的偏移量, 如果c 是'b', 则c-'a'为1, 再加上对应的大写字母起始值'A', 结果正是 'B'
不知以上解释是否能消除你的疑问
1、在ASCII表中字符'0'~'9'是按顺序由小到大连续排列的,并且字符'0'的值为48,所以如果需要将某字符('0'~'9')转换为相应的整数0~9,一个简单的方法就是将该字符的值减去字符'0'的值,也就是楼主提到的表达式。
2、同理,在ASCII表中字符'a'~'z'及'A'~'Z'也是按顺序由小到大分别连续排列的,如果将某小写字符('a'~'z')转换为相应的大写字符('A'~'Z'),一个简单的方法就是将该小写字符减去字符'a'的值,结果表示该字符相对字符'a'的偏移量,然后加上大写字符'A',得到相对与字符'A'对应偏移处的大写字符。
(1)
字符是以ASCII码存储的,0-9 对应 0x30--0x39,如 '0' = 0x30 '9' = 0x39
如果想得到数字符所对应的数字,则需要减去 0x30
所以 8 = '8' - '0'
即 8 = 0x38 - 0x30 = 0x08
(2)
同理 A-Z 对应 0x41--0x5A, a-z 对应 0x61--0x7A
大小写间相隔 0x20
所以 c - 'a' + 'A' = c - 0x61 + 0x41 = c - 0x20
即 c 为小写时 c - 0x20 是将c由小写转为大写
相反,c 为大写时,c + 0x20 是将c由大写转为小写
1.不减0的话得出的不是一个数字,而是它的ascii码.-'0'就等于ascii码减了48, 就是对应的整数了.
2.所有的字母的大小写的差距都是'A'-'a',是一样的,你随便写c-'b'+'B'也是一样的
string[i]代表的是数字字符.0的ascii码是48.从0到9数字字符的ascii码依次弟增.如果这个字符是些"5"的话.那么"5"-"0"=5.就把字符5变成整数5了.
这里的c>='a'&&c<='z'中的c是一个字符变量.它可以表示所有的字符.当它表示b的时候.输出结果就是B了,其它的字母也都一样.
1.在ASCII表里是按'0','1'这么排的,减了之后得到的是差值,也就是跟0的差,就是数值了。
2.'A'-'a'就是求出了大小写字母之间的差,只要c是小写字母那么c+'A'-'a'就是大写的了