c++ - 如何对代表数字的char执行乘法?
问题描述
我正在尝试将 char 数字转换为整数:{'1' -> 1, '2' -> 2, ..., '9' -> 9}
然后将该整数乘以另一个整数。这是我迄今为止的尝试。
#define toDigit(c) c - '0'
printf("%d\n", toDigit('3') * 5);
预期输出:15
实际输出:-189
为什么这不起作用?
解决方案
当您的宏展开时,代码如下所示:
printf("%d\n", '3' - '0' * 5);
此时,通常的算术优先级开始起作用,并且首先发生乘法。所以你得到 51-(48*5),它给出了你看到的答案。
您可以避免将宏扩展放在括号中,如下所示:
#define toDigit(c) ((c) - '0')
理想情况下,避免为此使用宏。或出于任何其他目的,就此而言。它们容易出错,并且可以很容易地被函数替换,如下所示:
int toDigit(char c) { return c - '0'; }
您可以在复杂的表达式中使用它而不会出现任何问题。
推荐阅读
- reactjs - 使用 redux 操作写入 Firebase DB 会在 DB 中写入全新数据
- vhdl - 如何编写代码以跳过上升沿并继续计数,直到在 vhdl 中检测到第二个上升沿
- android - 如何使用 AsyncTask 下载大型视频文件?
- java - 将 DISTINCT 与 SQLiteDatabase 查询方法一起使用时如何不使用 LIMIT?
- odoo - 在 POS(销售点)会话中查看条形码字段
- jenkins - Jenkins 流水线条件环境变量
- java - 从智能卡读取私钥以对 XML 文档进行数字签名
- wordpress - WooCommerce - 在不编辑模板的情况下删除换行符
- javascript - 启动我的网络应用程序后,是否可以自动启用用户设备的蓝牙连接?
- javascript - MDB 轮播幻灯片更改事件