为什么一个数的平方,会变负数?结果令人惊讶(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。如果高过了上界,会发生溢出,溢出后有可能为正数,也有可能为负数,因此,我们往后再做运算时,一定要注意这些问题。
心得:虽然感觉在生活中感到正数的平方会变成负数是天方夜谭,但是看到了这些原因,也是感到计算机的不容易,因为我们的计算是任意的,只是算出来是需要时间,而机器在算数的时候,会有限制。所以用机器在算数的时候会有一定限制,但是会比人工计算省下很多时间。
为什么一个数的平方,会变负数?结果令人惊讶(sq代码解析)相关推荐
- 编写一个头文件,头文件中定义一个宏cube(x)用于求一个数的平方
<程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p145 7.1.2 上级实训内容 [实现内容17]编写一个头文件,头文件中定义一个宏cube(x)用于 ...
- 反复平方——快速计算一个数的平方
"反复平方"可以快速计算出一个数的平方,比方说,计算 a35a^{35},相当于计算 a34⋅aa^{34}\cdot a,也即 (a17)2⋅a(a^{17})^2\cdot a ...
- 帮我写一个C++程序,输入一个数,输出这个数的平方
好的,下面是一个使用 C 语言输入一个数,并输出这个数的平方的程序: #include <stdio.h> int main(void) { int num; // 定义一个变量来存储输入 ...
- 使整个网页变黑白色(灰色)的特效代码
全站CSS代码. html { filter:progid:DXImageTransform.Microsoft.BasicImage(grayscale=1); } 使用方法:这段代码可以变网页为黑 ...
- 滑模变结构控制matlab仿真 程序,滑模变结构控制MATLAB仿真 程序代码
[实例简介] 滑模变结构控制MATLAB仿真 程序代码,值得借鉴 [实例截图] [核心代码] 滑模变结构控制MATLAB仿真 └── 滑模变结构控制MATLAB仿真 ├── 43188036Slidi ...
- 网站变灰代码,一行代码让网站整体变灰,wordpress网站一行代码全站变灰教程
在遇到特殊情况的时候,我们作为站长需要紧急将网站变灰的需求,在此小编给大家总结了几种方法,通过简单修改一下站点样式即可实现.一段代码让网站整体变灰.这里主要介绍的利用 filter: grayscal ...
- java中统计正数负数个数_统计正数和负数再计算这些数的平均值:
package com.imooc; import java.util.Scanner; public class Test { public static void main(String[] ar ...
- java 整数变负数_一文帮你读懂Java整数的存储原理
前言 大家应该都知道,整数包括负数,零,和正数.在Java中,基本类型中byte(8位).short(16位).int(32位).long(64位)属于整数,并且没有无符号数,均是有符号的.对于计算机 ...
- java 整数变负数_年年有余之java求余的小技巧
背景 传说里玉皇大帝派龙王马上降雨到共光一带,龙王接到玉皇大帝命令,立马从海上调水,跑去共光施云布雨,但粗心又着急的龙王不小心把海里的鲸鱼随着雨水一起降落在了共光,龙王怕玉皇大帝责怪,灵机一动便声称他 ...
最新文章
- 玻利维亚java_BlogJava
- C#Dictionary源码
- NIO入门系列之第3章:从理论到实践:NIO 中的读和写
- Zabbix JVM 安装
- 「译」 用 Blazor WebAssembly 实现微前端
- android动态改变菜单栏,Android动态设置主题(使用RxBus模式)
- 惠普z6计算机进不去桌面,HP Z6 桌面工作站 | HP® HK 惠普香港
- 我的docker随笔31:oracle数据库再次部署
- k8s核心技术-Service概述_Service如何实现负载均衡_提供虚拟IP_以及Po的IP注册和发现---K8S_Google工作笔记0031
- python:urllib.error.URLError: <urlopen error [Errno 11004] getaddrinfo failed>
- pdf转图片,汉字不显示No glyph for 23495(CID 0969) in font SimSun
- 安卓一键ROOT权限获取软件排行榜
- Tensorflow中axis的理解
- STM32 PB3或者PB4不能正常使用的讲解
- 谷歌Cloud、Paly 中的XSS 漏洞可导致账户劫持
- 深圳监控安装上门服务简介
- python 3D绘制立体几何
- 软解码与硬解码区别linux,软解码和硬解码哪个好 软解码和硬解码有什么区别
- 针对基于Phison(群联)U盘的BadUSB攻击
- Paul Zindel【保罗·金代尔】