3

在这段代码中:

signed char v = -64;
int n = 4;
int x = v - '0' * (signed char)n;
std::cout << x << std::endl;

应该x-5-261?在我的理解中,初始化表达式是有signed char类型的,类型转换应该在初始化初始化计算之后发生。

所以,v - '0' * (signed char)n应该等于,因为这是估值-5中的等值。-261signed char

但是,那段代码打印-261.

4

2 回答 2

5

chars 和s在做算术时short被提升。int演员表(signed char)n没有帮助,因为结果立即被提升为int乘法。

以下是显式的隐式转换:

int x = (int)v - (int)'0' * (int)(signed char)n;
于 2019-05-05T15:04:52.170 回答
3

表达式v - '0' * (signed char)n被分组为v - ('0' * (signed char)n)

两个参数'0' 都在乘法之前(signed char)n转换为类型。int你无法阻止这种情况。

减去该总数,该总数v也被提升为int.

-261在具有 ASCII 编码的平台上产生。

于 2019-05-05T15:05:52.053 回答