【问题标题】:What does s[i] - '0' mean?s[i] - '0' 是什么意思?
【发布时间】:2015-10-08 00:29:07
【问题描述】:

以下代码来自K&R教科书,第71页:

val =10.0*val+s[i] -'0'

s[i] -'0' 在这里是什么意思?

【问题讨论】:

  • 数组s的声明在哪里?我猜它是一个包含数字的 char 数组,如果是这样,您询问的操作将返回减号的 int 值
  • 有点类似于atoi函数。

标签: c char c-strings digits


【解决方案1】:

似乎s 是一个字符数组或指向字符数组第一个元素的指针。并且元素 s[i] 包含一个表示数字的字符,例如 '5' 。要转换这个字符,例如在 ASCII 中具有等于 53 的内部代码(而字符 '0' 的内部代码是 48),使用了表达式

s[i] -'0'

相当于

53 - 48

等于数字5

根据 C 标准(5.2.1 字符集)

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

所以在ASCII中有一个关系

字符码值

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

例如,在 EBCDIC 中,表示数字的字符的内部代码是 240 - 249 ( 0 - 9 ) 或十六进制表示法F0 - F9

因此,根据使用的字符集从字符中获取数字是一种标准方法。

【讨论】:

  • OP 的代码可以移植到 ASCII 之外,即'0' 的实际值是多少并不重要,即使'0' 不是48,它也会起作用。
【解决方案2】:

它将char 形式的int 转换为实际的int

例如,如果s[i]'9',那么s[i] - '0' 将产生9

【讨论】:

    【解决方案3】:

    可能该代码用于将带有十进制数字的字符串转换为表示的数字(例如“1234”转换为1234)。

    s[i]是当前数字,s[i]-'0'是当前数字的数值(例如'9'变成9)。

    C 代码的其余部分就是位置数值系统的工作原理。

    【讨论】:

      【解决方案4】:

      假设s[i] 包含来自0 - 9 的值,那么它将它们转换为数字。

      例如。 s[0]='1';

      所以val=s[0]-'0';

      将减少到val=49-48; //ascii values

      所以val = 1;

      【讨论】:

        猜你喜欢
        • 2021-05-27
        • 1970-01-01
        • 1970-01-01
        • 2014-01-12
        • 1970-01-01
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多