sunke0806 2020-03-18 20:17 采纳率: 0%
浏览 551
已结题

求助:关于1左移32位的问题

#include<stdio.h>
void main()
{
    int w = sizeof(int) * 8;
    int k = 0;
    printf("%x\n", w);
    printf("%x\n", (1 << (32 - 0)) - 1);
    printf("%x\n", (1 << (w - k)) - 1);
}

上述代码,运行结果如下图所示
程序运行结果

为什么用字母和数字分别对1进行左移32操作得到的结果不一样?

  • 写回答

1条回答 默认 最新

  • threenewbee 2020-03-18 22:11
    关注
    只能这样解释
    printf("%x\n", (1 << (32 - 0)) - 1);
    这个地方1 << (32 - 0)) - 1经过了编译器优化,是常数,结果直接嵌入代码。编译器计算(对于溢出),和运行时计算,不一样。
    
    我的编译器有一个 warning: left shift count >= width of type [enabled by default]
    
    评论

报告相同问题?