c - 一元 +/- 运算符怎么可能导致 "-a"或 "+a"中的整数提升, 'a' 是算术数据类型常量/变量?

标签 c type-conversion expression integer-promotion

这条看似微不足道的台词摘 self 的 Mike Banahan & Brady 的 C 书 (Section 2.8.8.2) .

我可以理解隐式提升是如何根据操作数的类型在像 c=a+b 这样的表达式中发挥作用的,但是我无法理解它是如何以及在什么情况下可以计算出来的在类似 -b 的地方,b 是任何合法的操作数。你能解释一下,然后举个合适的例子吗?

提取的文本如下:

The usual arithmetic conversions are applied to both of the operands of the binary forms of the operators. Only the integral promotions are performed on the operands of the unary forms of the operators.

更新:

为了避免被忽视,我在这里添加了我根据 OUAH 在评论中的回答提出的问题 – 书上说“只执行整数提升”...这是否意味着在像 x=-y 这样的表达式中,其中“x”是长 double 且'y' 是一个 float ,如果我们显式使用一元运算符,'y' 不会被提升为 long double 吗?我知道会这样,但仍然要求它对“仅整数促销...”部分有更清晰的了解。

更新:

您能否举例说明提升如何对以下位运算符起作用?对于最后三个,我是否应该假设每当将它们用于变量时,它首先被提升为整数类型? “通常的算术转换”对前三个到底意味着什么?你能举个小例子吗?如果可以在这里解决,我不想将它作为一个单独的问题发布。

enter image description here

最佳答案

以 32 位系统为例:

 unsigned char a = 42;

 printf("%zu\n", sizeof a);   // prints 1

 printf("%zu\n", sizeof +a);  // prints 4, a has been promoted to int

关于c - 一元 +/- 运算符怎么可能导致 "-a"或 "+a"中的整数提升, 'a' 是算术数据类型常量/变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25960878/

相关文章:

c - D-Bus 列表名称

java - 使用 Java 中的任何 UPnP 库进行简单端口转发的示例?

c++ - 简化双链转换

c# - 从 Collection 元素到 Int64 的转换错误。指定的转换无效

python - scipy PchipInterpolator 错误 : 'array cannot be safely cast to required type'

python - 在 Python 的 'and' 循环中使用 'while' 表达式

excel - SSIS仅从全名中提取名字

c - 删除数组复制步骤时合并排序问题

c - 为什么第一个素数总是变成1而不是2

在 Maxima 中将表达式格式化为标准形式