C中数字字符的数值

C中数字字符的数值,c,primitive-types,C,Primitive Types,我刚刚开始通读,我很难理解其中的一部分。以下是第24页的摘录: 宣言 intndigit[10]; 将ndigit声明为10个整数的数组。数组下标在C中总是从零开始,因此元素是 ndigit[0], ndigit[ 1], ..., ndigit[9] 这反映在初始化和打印数组的for循环中。下标可以是任何整数表达式,其中包括整数变量(如i)和整数常量。这个特殊的程序依赖于数字的字符表示的属性。例如,测试 if(c>='0'&&c<='9') 仅当“0”、“1”

我刚刚开始通读,我很难理解其中的一部分。以下是第24页的摘录:

宣言

intndigit[10];
将ndigit声明为10个整数的数组。数组下标在C中总是从零开始,因此元素是

ndigit[0], ndigit[ 1], ..., ndigit[9]
这反映在初始化和打印数组的for循环中。下标可以是任何整数表达式,其中包括整数变量(如i)和整数常量。这个特殊的程序依赖于数字的字符表示的属性。例如,测试

if(c>='0'&&c<='9')
仅当“0”、“1”、“…”和“9”具有连续递增的值时,此选项才有效。幸运的是,这适用于所有角色集。根据定义,字符只是小整数,所以字符变量和常量与算术表达式中的整数相同。这是自然和方便的;比如说

c-'0'
是一个整数表达式,其值介于0和9之间,对应于c中存储的字符“0”到“9”,因此是数组ndigit的有效下标


我无法理解的部分是,为什么表达式
c-'0'
中需要
-'0'
部分。如果一个字符如作者所说是一个小整数,并且数字字符对应于它们的数值,那么
-“0”
在做什么?

它将从键盘上“0”键的ASCII码转换为值零


如果执行int x='0'+'0',结果将不会为零。

它将从键盘上“0”键的ASCII码转换为值零


如果执行int x='0'+'0',结果将不会为零。

字符的数值(在大多数系统上)是其ASCII值。“0”的ASCII值是48,“1”是49,以此类推


通过将字符“0”的值减去48变为0,“1”变为1等。通过将其写成
c-“0”
您实际上不需要知道“0”的ASCII值是什么(或者系统正在使用ASCII-它可能正在使用)。唯一重要的是这些值是连续递增的整数。

字符的数值(在大多数系统上)是其ASCII值。“0”的ASCII值是48,“1”是49,以此类推


通过将字符“0”的值减去48变为0,“1”变为1等。通过将其写成
c-“0”
您实际上不需要知道“0”的ASCII值是什么(或者系统正在使用ASCII-它可能正在使用)。唯一重要的是这些值是连续递增的整数。

数字字符与其数值不对应。它们对应于它们的编码值(在本例中为ASCII)

IIRC,ascii“0”是值48。幸运的是,对于本例和大多数字符集,“0”到“9”的值都按顺序存储在字符集中


因此,从任何ASCII数字中减去“0”的ASCII值将返回其“真”值0-9。

数字字符与其数值不对应。它们对应于它们的编码值(在本例中为ASCII)

IIRC,ascii“0”是值48。幸运的是,对于本例和大多数字符集,“0”到“9”的值都按顺序存储在字符集中


因此,从任何ASCII数字中减去“0”的ASCII值将返回其“真”值0-9。

在大多数字符编码中,所有数字都连续放置在字符集中。例如,在ASCII中,它们在
0x30
处以
'0'
开头(
'1'
0x31
'2'
0x32
,等等)。如果需要给定数字的数值,只需从中减去
'0'
,即可得到正确的值。使用
'0'
而不是特定值的优点是,代码可以轻松移植到其他字符集。

在大多数字符编码中,所有数字都连续放置在字符集中。例如,在ASCII中,它们在
0x30
处以
'0'
开头(
'1'
0x31
'2'
0x32
,等等)。如果需要给定数字的数值,只需从中减去
'0'
,即可得到正确的值。使用
'0'
而不是特定值的优点是,您的代码可以轻松移植到其他字符集。

如果您通过字符串的字符访问字符串,您将获得ASCII值,即使字符恰好是数字

幸运的是,设计该字符表的人员确保了0到9的字符是连续的,因此您可以通过减去ASCII值“0”将ASCII转换为数字

这就是代码的作用。我不得不承认,当你第一次看到它时,你会感到困惑,但这不是火箭科学

“0”的ASCII字符值为48,“1”为49,“2”为50,依此类推

这里有一个漂亮的ASCII图表供参考:


如果通过字符串的字符访问字符串,即使字符恰好是数字,也会返回ASCII值

幸运的是,设计该字符表的人员确保了0到9的字符是连续的,因此您可以通过减去ASCII值“0”将ASCII转换为数字

这就是代码的作用。我不得不承认,当你第一次看到它时,你会感到困惑,但这不是火箭科学

“0”的ASCII字符值为48,“1”为49,“2”为50,依此类推

这里有一个漂亮的ASCII图表供参考:


谢谢,作者基本上说了同样的话,但只是没有理解。现在一切都有了意义。如果你知道“0”是48,你可以用48。使用“0”至少在一定程度上有助于移植到其他(非ASCII)字符集,其中数字具有不同的字符值
if(c>='0'&&c<='9')
c-'0'`
c-'0'