首页 > 解决方案 > 如何对代表数字的char执行乘法?

问题描述

我正在尝试将 char 数字转换为整数:{'1' -> 1, '2' -> 2, ..., '9' -> 9}然后将该整数乘以另一个整数。这是我迄今为止的尝试。

#define toDigit(c) c - '0'

printf("%d\n", toDigit('3') * 5);

预期输出:15

实际输出:-189

为什么这不起作用?

标签: c++chartype-conversionint

解决方案


当您的宏展开时,代码如下所示:

printf("%d\n", '3' - '0' * 5);

此时,通常的算术优先级开始起作用,并且首先发生乘法。所以你得到 51-(48*5),它给出了你看到的答案。

您可以避免将宏扩展放在括号中,如下所示:

#define toDigit(c) ((c) - '0')

理想情况下,避免为此使用宏。或出于任何其他目的,就此而言。它们容易出错,并且可以很容易地被函数替换,如下所示:

int toDigit(char c) { return c - '0'; }

您可以在复杂的表达式中使用它而不会出现任何问题。


推荐阅读