当前位置:  开发笔记 > 编程语言 > 正文

评估c中if语句中的表达式

如何解决《评估c中if语句中的表达式》经验,为你挑选了1个好方法。

假设我写了一个代码:

int main()
{
    int i,a=2147483647;

    if((2*a)<0)
        printf("hello");
    else
    printf("world");
}

输出是世界的.但对于 :

int main()
{
    int i,a=2147483647;
    if((a+a)<0)
        printf("hello");
    else
        printf("world");
}

输出是hello.

这是怎么回事?
存储在内存中的2*a和a + a的值在哪里(内存位置的数据类型是什么?)



1> MikeCAT..:

如果你的INT_MAX2147483647(pow(2, 31) - 1),2*a并且a+a确实导致溢出,并且在有符号整数中溢出aritimetic 在C中是未定义的行为.

引自N1256 6.5表达式:

5如果在计算表达式期间发生异常情况(即,如果结果未在数学上定义或未在其类型的可表示值范围内),则行为未定义.

未定义的行为可能会导致一切.请参阅编译器的输出以了解此特定结果的原因.

要知道存储2*aa+a存储值的位置,还要查看编译器的输出.我想如果编译器足够智能,它们应该存储在寄存器中,而不是存储在内存中.一些不良的编译器可能将它们的值存储在内存的堆栈上.

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有