为什么一个数的平方,会变负数?结果令人惊讶(sq代码解析)

在刚接触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。如果高过了上界,会发生溢出,溢出后有可能为正数,也有可能为负数,因此,我们往后再做运算时,一定要注意这些问题。

 

心得:虽然感觉在生活中感到正数的平方会变成负数是天方夜谭,但是看到了这些原因,也是感到计算机的不容易,因为我们的计算是任意的,只是算出来是需要时间,而机器在算数的时候,会有限制。所以用机器在算数的时候会有一定限制,但是会比人工计算省下很多时间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值