【发布时间】:2014-11-15 15:21:26
【问题描述】:
这条看似微不足道的台词摘自我的 Mike Banahan & Brady (Section 2.8.8.2) 的 C 书。
我可以理解隐式提升是如何在 c=a+b 等表达式中发挥作用的,具体取决于操作数的类型,但我无法理解在 -b 之类的表达式中如何以及在何种情况下会出现相同的情况,其中 b 是任何合法的操作数。你能解释一下,然后举个恰当的例子吗?
提取的文本如下:
通常的算术转换适用于两个操作数 运算符的二进制形式。只有积分促销是 对运算符的一元形式的操作数执行。
更新:
为了避免被忽视,我在这里根据 OUAH 在评论中的回答添加我所问的内容——
书上说'Only the integral promotions are performed'...是不是意味着在x=-y这样的表达式中,'x'是一个long double,'y'是一个float,'y'不会被提升为long double如果我们明确使用一元运算符?我知道会这样,但仍然要求它更清楚地了解“仅整数促销......”部分。
更新:
您能否举例说明提升对以下位运算符的作用?对于最后三个,我是否应该假设每当在变量上使用它们时,它首先被提升为整数类型?前三个“通常的算术转换”到底是什么意思?你能举个小例子吗?如果可以在这里解决,我不想将其作为单独的问题发布。
【问题讨论】:
-
我认为是因为它被翻译成
a * +1或a* -1 -
@GradyPlayer: 不,一元
+和一元-是不同的操作数;除了正确实现其行为所需的任何机器代码之外,它们不会被“翻译”成任何东西。
标签: c type-conversion expression integer-promotion