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

求助:关于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]
    
    评论

报告相同问题?

悬赏问题

  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥50 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大
  • ¥15 使用spss做psm(倾向性评分匹配)遇到问题
  • ¥20 vue+UEditor附件上传问题
  • ¥15 想做个WPS的自动化代码,不知道能做的起不。
  • ¥15 uniApp,生成安卓安卓包后,黑暗主题中间内容不生效,底部导航正常
  • ¥15 斯坦福自动漂移非线性模型反解