Jin*_*Jin 7 c sizeof addition integer-promotion
我对sizeofC中的运算符感到困惑.
#include <stdio.h>
int main(void)
{
char num1=1, num2=2, result;
result = num1 + num2;
printf("Size of result: %d \n",sizeof result);
printf("Size of result: %d \n",sizeof(num1+num2));
}
Run Code Online (Sandbox Code Playgroud)
结果分别为1和4.为什么会这样?
TL; DR回答:
sizeof result和...一样sizeof(char).sizeof(num1+ num2)和sizeof (int) 为什么一样?在您的情况下,它们分别产生1(标准保证)和4(可能变化).
也就是说,sizeof产生一个类型的结果size_t,所以你应该%zu格式化说明符来打印该值.
为什么:
首先,对于加法运算符+,引用C11,章节§6.5.6
如果两个操作数都具有算术类型,则对它们执行通常的算术转换.
关于通常的算术转换,§6.3.1.8/ p1
[....]否则,将对两个操作数执行整数提升.[...]
然后从§6.3.1.1,/ p2开始,
如果a
int可以表示原始类型的所有值(由宽度限制,对于位字段),则该值将转换为int; 否则,它被转换为unsigned int.这些被称为整数促销.
所以,sizeof(num1+num2)是一样的sizeof(int).
result是char类型,因此sizeof是给予1,同时num1+num2提升为int类型,因此它给予4(大小int)。
请注意,当对小于 的类型执行算术运算int并且其所有值都可以表示时,int结果将提升为int类型。