如何在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
相关产品推荐
相关产品推荐

