"0"在C中的含义是什么?

use*_*439 -2 c data-structures

在用于评估后缀表达式的代码中,写入了将字符作为整数传递,我们将其写为character - '0'.这有什么意义?

hac*_*cks 6

这是因为charater - '0'给出了字符的整数值.C标准指出:

C11 5.2.1 3:

在源和执行基本字符集中,0上述十进制数字列表中每个字符的值应大于前一个值的值.

使用上述事实,可以通过上面的表达式计算0to 之间的字符的整数值9.

char character = '5';
int val = character - '0';   
Run Code Online (Sandbox Code Playgroud)

现在,如果48是代码0那么

'5' - '0' = 53 - 48 = 5   // 
Run Code Online (Sandbox Code Playgroud)

  • @BasileStarynkevitch:C中不允许使用此类字符集.C 2011 5.2.1 3要求数字是连续的. (2认同)

Ste*_*ppo 5

这是将数字字符转换为数字的快速方法.它基于以下事实:字符编码为数字,C标准要求表示数字的字符必须是连续的(请参阅下面的@ EricPostpischil的评论).

因此,如果48是对应的代码'0',那么49将是'1',依此类推.因此,您可以将'1'(字符)转换为1(整数)'1' - '0' = 49 - 48 = 1.

  • 数字字符是连续的这一事实不是假设; 它是C标准的明确要求,根据C 2011 5.2.1 3:"在源和执行基本字符集中,上述小数位数列表中0之后的每个字符的值应大于该值以前的." (3认同)