char上的C数学/整数运算[重复]

Posted

技术标签:

【中文标题】char上的C数学/整数运算[重复]【英文标题】:C mathematical/integer operations on a char [duplicate] 【发布时间】:2017-05-16 14:47:12 【问题描述】:

我目前正在阅读 K&R 书籍。第 22 页,数组 1.6

int c, i, nwhite, nother;
int ndigit[10];

nwhite = nother = 0;
for (i = 0; i <10; ++i)
    ndigit[i] = 0;

while ((c = getchar()) != EOF)
    if(c >= '0' && c<= '9')
        ++ndigit[c-'0'];
    else if (c == ' ' || c == '\n' || c == '\t')
        ++nwhite;
    else
        ++nother;

printf("digits =");
for(i = 0; i < 10; ++i)
    printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);

它说字符被认为是整数。我尝试在第一个 if 语句中删除“0”。但是,阵列停止工作。如果chars被认为是整数,为什么程序正常运行需要'0'

【问题讨论】:

0 不是'0' c-'0' 是从 ASCII 数字中获取数字的简写方式。由于 '0' 是最低的 ASCII 值,并且数字在 ASCII 编码中是连续的,所以从数字字符中减去 '0' 会得到它的值。 字符 '0'(零)的 ASCII 值为 48,与 NUL 字符 '\0' 不同,后者的数值为 0。注意:C 不受 ASCII 标准的约束但如果你使用的电脑不应该告诉你。 @DanAllen 他减去了“0”,这样作为输入的字符实际上代表了它们显示的数字。 @AppWriter 但这不是重点吗? Grayson 不知道为什么这段代码(可能不是他们的)需要从某些东西中减去“0”并认为它什么也没做,因为他们认为“0”是零。 【参考方案1】:

字符数字,但'0' 不是 0,但(在大多数情况下)48'1' 不是 em> 1 但(在大多数情况下)49,等等。

Here is the detailed explanation of it.

【讨论】:

以上是关于char上的C数学/整数运算[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C ++删除运算符混淆[重复]

派生类上的C ++赋值运算符实现[重复]

重复字符串上的 SQL 等效“$all”MongoDB 运算符

允许python对象与数学运算符交互[重复]

在函数php中添加数学运算符[重复]

115-数学运算符 加减乘除求余