小编djp*_*jp3的帖子

使用<和<=在C中的最大和最小整数的结果不一致

我正在编写一些C代码来查看整数的位表示.在此过程中,我发现了基于优化设置返回不同结果的代码.我只是做错了什么,或者这是一个编译器错误?

这是代码:

#include <stdio.h>

int test(int x, int n)
{
  int TMin_n = -(1 << (n-1));
  int TMax_n = (1 << (n-1)) - 1;
  return x >= TMin_n && x <= TMax_n;
}

int main(){

    int x = 0x80000000;
    int n = 0x20;
    if(test(x,n)){
        printf("passes\n");
    }
    else{
        printf("fails\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我这样编译它,我得到一个传递结果

$ gcc tester.c -o tester
$ ./tester
passes
Run Code Online (Sandbox Code Playgroud)

如果我这样编译它会得到一个失败的结果

$ gcc -O1 tester.c -o tester
$ ./tester
fails
Run Code Online (Sandbox Code Playgroud)

问题是

x <= TMax_n
Run Code Online (Sandbox Code Playgroud)

仅在优化的情况下评估为false.

这是我的平台详细信息:

$ gcc --version
Configured with: …
Run Code Online (Sandbox Code Playgroud)

c debugging gcc clang

2
推荐指数
1
解决办法
51
查看次数

标签 统计

c ×1

clang ×1

debugging ×1

gcc ×1