C表达式s[i]'的含义是什么;0';?

C表达式s[i]'的含义是什么;0';?,c,variable-assignment,C,Variable Assignment,我目前正在学习K&R,对Java有很强的掌握。反复出现的一件事是-“0”。我相信这是某种转换,但我无法从书中准确地了解它的含义 书中的示例行: int n; char s[]; n = 10 * n + (s[i] - '0'); 是把字符转换成整数吗?它是否类似于使用以下方法在Java中创建字符串: String newString = variable + ""; 单引号表示字符,由字节(8位)表示,字节是一个整数 “0”字符等于ASCII表中的数字48。单引号表示字符,由字节(8位)

我目前正在学习K&R,对Java有很强的掌握。反复出现的一件事是
-“0”
。我相信这是某种转换,但我无法从书中准确地了解它的含义

书中的示例行:

int n;
char s[];

n = 10 * n + (s[i] - '0');
是把字符转换成整数吗?它是否类似于使用以下方法在Java中创建字符串:

String newString = variable + "";

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


“0”字符等于ASCII表中的数字48。

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


“0”字符等于ASCII表中的数字48。

就像在Java中一样,字符表示为整数类型<代码>'0'具有字符
0
的值。由于数字的排列方式是这样的,
'1'='0'+1
的值将字符转换为数字(假定字符介于
'0'
'9'
之间)。

与Java中一样,字符表示为整数类型<代码>'0'具有字符
0
的值。由于数字的排列方式是这样的,
'1'='0'+1
的值将字符转换为数字(假定字符介于
'0'
'9'
之间)

是把字符转换成整数吗

是的,你说得对。这是从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()

是把字符转换成整数吗

是的,你说得对。这是从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()

请参见。将字符转换为int。例如
'5'
转换为
5
。如果是重复的,请抱歉。在阅读了这个问题之后,它是相关的,但我在发布之前搜索了一下。我从来不会研究一个题为“数组K&R 1.6字符”的问题。这是一个相当模糊的问题标题。重复的问题本身并不是一件坏事:现在链接的问题可能会被另一个标题找到。K&R间接强调C字符是代表ASCII字符的数值。请参阅。将字符转换为int。例如,
'5'
转换为
5
。如果是重复的,很抱歉。在阅读了这个问题之后,它是相关的,但我在发布之前搜索了一下。我从来不会研究一个题为“数组K&R 1.6字符”的问题。这是一个相当模糊的问题标题。重复的问题本身并不是一件坏事:现在链接的问题可能会被另一个标题发现。K&R间接强调C字符是代表ASCII字符的数值。谢谢,我知道这是对的,但我无法通过书中确认。有时候,要理解他们的意思有点困难。这个答案很有用,但不是很准确。把它作为学习的起点。@TomBlodget什么不准确?在Java中,
char
Character
不是整数类型。它们拥有一个Unicode/UTF-16编码单元,其中一个或两个编码一个字符。的确,在C语言中,
char
是一种整数类型。谢谢,我知道这是对的,但我无法通过书来证实。有时候,要理解他们的意思有点困难。这个答案很有用,但不是很准确。把它作为学习的起点。@TomBlodget什么不准确?在Java中,
char
Character
不是整数类型。它们拥有一个Unicode/UTF-16编码单元,其中一个或两个编码一个字符。的确,在C中,
char
是一种整数类型。不一定是ASCII.FYI,这不仅是ASCII的情况,也是C标准所要求的。PaulR和mafso的观点很好。我调整了答案以反映这一点。不一定是ASCII。仅供参考,这不仅是ASCII的情况,也是C标准所要求的。保罗和马夫索的观点很好。我调整了答案以反映这一点。