C程序|集28的输出

预测以下C程序的输出。

null

问题1

#include <stdio.h>
int main()
{
char a = 30;
char b = 40;
char c = 10;
char d = (a * b) / c;
printf ( "%d " , d);
return 0;
}


乍一看,表达式(a*b)/c似乎会导致算术溢出,因为有符号字符的值只能从-128到127(在大多数c编译器中),而子表达式(a*b)的值是1200。例如,下面的代码片段在32位little endian机器上打印-80。

    char d = 1200;
    printf ("%d ", d);

原始程序中不会发生算术溢出,程序的输出为120。在C中, 烧焦 短的 转化为 智力 用于算术计算。所以在表达式(a*b)/c中,a、b和c被提升为 智力 而且不会发生溢出。

问题2

#include<stdio.h>
int main()
{
int a, b = 10;
a = -b--;
printf ( "a = %d, b = %d" , a, b);
return 0;
}


输出:

a = -10, b = 9

语句“a=-b–;”编译得很好。一元减号和一元减量具有保存优先级和从右到左的关联性。因此“-b-”被视为有效的-(b-)。所以-10将被分配给“a”,而“b”将变成9。 尝试以下程序作为练习。

#include<stdio.h>
int main()
{
int a, b = 10;
a = b---;
printf ( "a = %d, b = %d" , a, b);
return 0;
}


如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享