本帖最后由 jackz007 于 2020-1-17 11:20 编辑
在 Linux 系统环境下,用 gcc 编译 C / C++ 代码,如果用到了数学库,必须在编译命令中使用 -lm 选项加以声明。
用下面的命令编译试试:
代码中使用数学库是为了计算 2 的指数幂,其实,2 ^ 0 + a ^ 1 + 2 ^ 2 + 2 ^ 3 + ... + 2 ^ 63 = 0xffffffffffffffff,这个数值很特殊,是一个 64 位无符号整型数所能表达的极限值。
代码中定义的变量都是 unsigned long long,但是,最后在 printf() 中所使用的格式描述符却都是 "%d","%d" 只能把变量当作 32 位变量来显示,在变量的数值超过 32 位的时候,就会出现显示不全的问题,这个显然是隐患!
于是,我帮楼主修改了一个版本,楼主可以参考一下
- #include <stdio.h>
- int main(void)
- {
- unsigned long long sum ;
- sum = 0xffffffffffffffff ; // 其实,代码中的循环就是为了计算出这个数值
- printf("should give %llu wheats\n" , sum) ;
- printf("these wheats wheigh %llu kgs\n" , sum / 2500) ;
- }
复制代码
编译这个代码,命令行中就可以不用出现 -lm 选项了。