C表达式s [i] - ' 0&#39 ;?

时间:2014-07-29 15:39:53

标签: c variable-assignment

我目前正在攻读K& R,我对Java有很强的把握。一次又一次出现的是- '0'。我认为这是某种转换,但我不能完全从书中收集到它的含义。

书中的示例行:

int n;
char s[];

n = 10 * n + (s[i] - '0');

将char转换为int吗?它类似于使用以下方法在Java中创建字符串:

String newString = variable + "";

3 个答案:

答案 0 :(得分:3)

就像在Java中一样,字符表示为整数类型。 '0'具有字符0的值。由于数字的布局使得'1' = '0' + 1的值将字符转换为数字(假设它在'0''9'之间)。

答案 1 :(得分:2)

  

是否将char转换为int?

是的,你是对的。这是从s [i]中减去字符“0”的ASCII(或其他编码)值。我会假设s [i]是一个从'0'到'9'的字符。在这种情况下,您将获得该字符的int值。

这是有效的,因为所有数字的编码值都是按升序排列的。例如,如果编码是ASCII,则它看起来像这样:

'0' = 48
'1' = 49
'2' = 50
'3' = 51
'4' = 52
'5' = 53
'6' = 54
'7' = 55
'8' = 56
'9' = 57

所以你拿'3' - '0'(或51 - 48)得到整数3。这是一个简单的技巧,我不认为它是好的代码(因为,正如你所注意到的,它会引起混淆)。

对于优质代码,应使用带有描述性名称的函数进行转换,例如digitCharaterToInt()

答案 2 :(得分:-1)

单引号表示字符,由字节(8位)表示,它是一个整数。

' 0' char等于ASCII表中的数字48。