在刚接触C语言的时候,就接触了两个数相乘,一个数的平方。当然,我们做结果都是意料之中的结果,都是正确的。但是,不巧的是,上课的时候,老师又给了一段代码,看似普通,实则不难,但是却让我们了解了在C语言中,并不是我们想象的那样
先给大家看下这段代码:
#include <stdio.h>
#include <stdlib.h>
int sq(int x) {
return x*x;
}
int main(int argc, char *argv[]) {
int i;
for (i = 1; i < argc; i++) {
int x = atoi(argv[i]);
int sx = sq(x);
printf("sq(%d) = %d\n", x, sx);
}
return 0;
}
看上去是不是很简单?首先是头文件没得说,接下来是一个返回一个数平方,接下来进入主函数,主函数中,也是很简单的定义一个数,并带入函数中,输出结果。
表面上风平浪静,暗地里却风起云涌!看下我们的结果吧:
随着数字的增长,似乎程序也变得“吃力”,导致算错了?
其实,在计算机中乘法相对于加法来说比较困难,所以选择把乘法转化为 移位和加法 两个步骤组成一步来进行。而且在int型中,数字也是有上界的,范围为-2147483648~+2147483647,无符号情况下表示为0~4294967295。如果高过了上界,会发生溢出,溢出后有可能为正数,也有可能为负数,因此,我们往后再做运算时,一定要注意这些问题。
心得:虽然感觉在生活中感到正数的平方会变成负数是天方夜谭,但是看到了这些原因,也是感到计算机的不容易,因为我们的计算是任意的,只是算出来是需要时间,而机器在算数的时候,会有限制。所以用机器在算数的时候会有一定限制,但是会比人工计算省下很多时间。