You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C语言中直接计算float类型的取值范围?

关于《C程序设计语言》(K&R第二版)习题2.1的疑问

我正在完成《C程序设计语言》(K&R)第二版的习题2.1,已经算出signed/unsigned char、short、int和long类型的取值范围——补码相关的计算还算容易,但IEEE754标准的相关计算就没这么简单了。

以下是我写的部分代码:

void short_range() {
  unsigned short next = us_max;

  for (; next != 0; next *= 2)
    us_max = next;

  signed short ss_min = -us_max;
  signed short ss_max = us_max - 1;

  us_max = us_max + (us_max - 1);
  ui_max = us_max + 1;

  printf("signed short range (%d, %d)\n", ss_min, ss_max);
  printf("unsigned short range (0, %u)\n", us_max);
}

void int_range() {
  unsigned int next = ui_max;

  for (; next != 0; next *= 2)
    ui_max = next;

  signed int si_min = -ui_max;
  signed int si_max = ui_max - 1;

  ui_max = ui_max + (ui_max - 1);
  // 我搞不懂为什么只有这里要强制转换`ui_max`,之前的函数不用
  // 但如果不转的话,`ui_max`会溢出到0,搞砸`long_range`的计算
  ul_max = (long)ui_max + 1;

  printf("signed int range (%d, %d)\n", si_min, si_max);
  printf("unsigned int range (0, %u)\n", ui_max);
}

内容的提问来源于stack exchange,提问作者Fernando Castro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:13:13