C编程中的整数提升
Integer promotions in C programming
在下面的代码中,哪些语句具有整数提升?
unchar a;
unchar b;
short c;
a = 0xFE;
b = 0xFE;
c = a+b;
int d = a==b
我在一个问题系列中得到了这样的问题。怎么回答。
此外,一些数据类型如 char 、 short int 占用的字节数少于 int ,这些数据类型在对它们执行操作时会自动提升为 int 或 unsigned int 。这称为整数提升。例如,没有算术计算发生在较小的类型上,如 char、short 和 enum。
which statements have integer promotions.
unchar a;
unchar b;
short c;
这些似乎是声明,可能 unchar
是 unsigned char
的别名。其中没有表达式,所以没有整数提升。
a = 0xFE;
0xFE
是一个无后缀的十六进制常量,其值 254 必须适合 int
。根据 C 2018 6.4.4.1 5,其类型为 int
。 a
是一个左值。作为赋值的左操作数,它作为左值保留,不转换为值。
根据 C 2018 6.5.16 2,右操作数被转换为左操作数在左值转换后的类型,因此 unsigned char
。不执行整数提升。
b = 0xFE;
这个和上面一样
c = a+b;
对于算术操作数上的二进制 +
运算符,按照 c 2018 6.5.6 5 执行通常的算术转换。对于整数运算,通常的算术转换包括整数提升。因此整数提升是在 a
和 b
.
上执行的
除了在深奥的 C 实现中,int
可以表示 unsigned char
的所有值。在这种情况下,整数提升将 unsigned char
转换为 int
。所以他们将每个 a
和 b
转换为 int
.
然后 +
产生一个 int
结果,并且,由于它是赋值的右操作数,它被转换为 c
在左值转换后的类型,short
。没有进一步的整数促销。
int d = a==b
这与上面类似。对于 ==
的算术操作数,按照 C 2018 6.5.9 4 执行通常的算术转换。这些包括 a
和 b
上的整数提升。此中没有其他整数促销。
在下面的代码中,哪些语句具有整数提升?
unchar a;
unchar b;
short c;
a = 0xFE;
b = 0xFE;
c = a+b;
int d = a==b
我在一个问题系列中得到了这样的问题。怎么回答。
此外,一些数据类型如 char 、 short int 占用的字节数少于 int ,这些数据类型在对它们执行操作时会自动提升为 int 或 unsigned int 。这称为整数提升。例如,没有算术计算发生在较小的类型上,如 char、short 和 enum。
which statements have integer promotions.
unchar a;
unchar b;
short c;
这些似乎是声明,可能 unchar
是 unsigned char
的别名。其中没有表达式,所以没有整数提升。
a = 0xFE;
0xFE
是一个无后缀的十六进制常量,其值 254 必须适合 int
。根据 C 2018 6.4.4.1 5,其类型为 int
。 a
是一个左值。作为赋值的左操作数,它作为左值保留,不转换为值。
根据 C 2018 6.5.16 2,右操作数被转换为左操作数在左值转换后的类型,因此 unsigned char
。不执行整数提升。
b = 0xFE;
这个和上面一样
c = a+b;
对于算术操作数上的二进制 +
运算符,按照 c 2018 6.5.6 5 执行通常的算术转换。对于整数运算,通常的算术转换包括整数提升。因此整数提升是在 a
和 b
.
除了在深奥的 C 实现中,int
可以表示 unsigned char
的所有值。在这种情况下,整数提升将 unsigned char
转换为 int
。所以他们将每个 a
和 b
转换为 int
.
然后 +
产生一个 int
结果,并且,由于它是赋值的右操作数,它被转换为 c
在左值转换后的类型,short
。没有进一步的整数促销。
int d = a==b
这与上面类似。对于 ==
的算术操作数,按照 C 2018 6.5.9 4 执行通常的算术转换。这些包括 a
和 b
上的整数提升。此中没有其他整数促销。