c语言科学计数法e格式例子(c语言指数e的规则)

c语言科学计数法e格式例子(c语言指数e的规则)

虽然但是,我不是很清楚这个笔记要从哪写起,能写的东西真的太多了。

那第1p我们就先谈点基础的东西。

今日迷惑对话

“你买了什么书?”

“编程。”

“Python还是C?”

“沈从文。”

计算机史这东西没啥意思,我们直接从计算机结构开始吧,虽然学的是编程语言,但是了解计算机的结构可以让你更好的理解程序。

用人话来讲,计算机由主机本体和外设组成,本体就是你的主机,外设就是键盘鼠标显示器音响。

主机主要由中央处理器、内存、显卡、主板、硬盘、电源组成。电源是整台电脑的心脏,负责给其他部件提供稳定的电流,中央处理器就是CPU,负责计算机最主要的计算工作,显卡主要负责辅助CPU进行一些大规模浮点运算,内存学名随机记忆存储器,相当于CPU的书桌和一部分草稿纸,电脑正在运行的程序会被储存在这里,显卡的书桌就叫显存,硬盘负责储存数据,相当于CPU的书柜或者仓库。

接下来我们谈谈电脑是如何把现实生活的概念描述给计算机的呢?事实上,世界上有很多计算机学家们制定好的标准,用来表示各种类型的信息,比如说用UTF-8来对字符进行编码,每个数字对应一个字符;

比如把图像切成小块,把每一个小块表达成RGB的颜色浓度,把颜色用数字表达出来,这样一个图像就变成了一长串数字……

总之,工程师和计算机学家们把各种需要表示的信息转换成数字,然后把数字存储在计算机里。

那数字又是怎么存储在计算机里的呢?这里我们就要提到二进制了。众所周知,二进制的数字只有0和1,这个反映在计算机里就是芯片中的电路通断,高电平为1,低电平为0,通过控制电路通断,就可以表示不同的数字,这就是计算机描述数字的方式。

那我们要怎么描述运算呢?我们可以通过制造各种逻辑晶体管,对这些高低电平进行逻辑运算,接着我们只需要把现实生活中的各种运算翻译成二进制逻辑运算就可以。就像《三体》里写的那样,通过很多个人举黑白旗的方式也可以“制造”一台二进制计算机。

常用逻辑电路符号

晶体管中每一条有效的电路,就被叫做一个位(bit),但是一个位太小了,所以大部分情况下我们会把8个bit合在一起用,这8个bit就合成了一个字节(Byte)

注意区分大小写,位的“b”是小写的,而字节的“B”是大写的。这个Byte就是我们平时讨论电脑用的B,比如内存16GB,硬盘2TB,u盘128GB,指的都是这个B。

那么到现在,我们终于可以开始聊聊c语言了。

在下文中,

书名号《》内的内容是必填,

黑括号【】内的内容是选填,

“//”后的内容表示注释。

首先我们聊聊源文件,源文件就是你存放代码的地方,c语言允许多个源文件协同编译(在代码开头通过#include《<源文件名称>》来引用别的源文件),这样你就可以使用自己或别人已经写好的各种函数、结构等,不需要每次都把代码写一遍,比如说在stdio.h中就有很方便的scanf和printf函数,在math.h中有sqrt、pow等函数,当然,以后你有实力了也可以写自己的函数,比如排序、链表相关的一些函数。

刚才我们说了那么多函数,那函数到底是个啥呢?这里我建议从函数的英文来理解函数,函数的英文名叫function,你们或许在很多地方都看见过这个单词,比如相机上的多功能按键,确实,在计算机语言中的函数就更偏向于“功能”这个词,而不是数学中常用的映射关系。

来自Edward Su的链表函数

函数就像是一台你自己创建的机器,你可以用它做很多事情,函数有接受参数的,也有不接受参数的,下面举几个例子方便大家理解:

比如说你可以让他帮你把篮球从体育馆拿到器材室(没有参数也没有返回值的);

给他一块抹布,让他把黑板擦一遍,当然你也可以给他一个板擦或者一个拖把(有参数没有返回值的);

叫他去楼下走走,让他回来告诉你看到了几只麻雀(没有参数有返回值的);

给他一堆菜,叫他做好了端出来(有参数有返回值的)。

c语言的基本组成单位就是函数,所有的c语言程序,有且只有一个main函数,在后面整理函数那一章的笔记的时候,我会详细讲main函数跟其他自己写的函数有什么区别,现在你记得每个程序里面必须都要有main函数就对了(多个源文件中也只能存在一个main函数)。

接下来我们看到变量,c语言使用如下的格式进行变量定义:

【链接属性】 《变量类型》 《标识符》【初始化】;

例如:

int a;//定义一个叫a的整形变量,不初始化long b = 9;//定义一个叫b的长整形变量,初始化为9float A77 = 7e2;//定义一个叫A77的单精度浮点变量,初始化为7e2static double _PAI= 3.1415926;//定义一个叫做_PAI的静态双精度浮点变量,初始化为3.1415926register long *pointer = &b;//定义一个叫pointer的寄存器长整形指针,初始化为&b

我们来分析分析这几条式子,

而static表示静态变量,该变量只能被初始化一次,占用一部分内存静态存储区一直到程序运行结束,并且只能在该源文件中被调用;

register表示寄存器变量,这种变量存储在CPU的缓存中,读写速度更快,但是一般CPU的缓存较小,不允许存储太多的寄存器变量,一般我们只会把某些常用的指针放在这;

变量类型交代的是这个变量用来存储什么样的数字、占用多少空间。c语言提供的变量类型从小到大有:

char//存储-128~127的整数,占用1字节short//存储-32768~32767的整数,占用2字节int//一般存储-2147483648~2147483648的整数,占用4字节long//存储-2147483648~2147483648的整数,占用4字节float//用来存储浮点数(小数与科学计数法),有6~7位有效数字,占用4字节double//用来存储更大更精细的浮点数,有15~16位有效数字,占用8字节long double//有些可能没有,占用16字节,存储很大的浮点数

那么写到这里,肯定有不少小伙伴有很多问号,我们来一一解答:

首先char确实是可以存储字符的,但字符在c语言中的实质是整数,所以你完全可以给char类型的变量赋值一个整数。

你可能不太理解书上写的“short至少16位”,“long至少32位”,其实short的全称叫做short int,而long的全称也是long int,C语言提供了整形变量int类型,这个类型是会根据你编译环境的改变而改变的。早期的电脑大多是16位的,32位还没普及,现在大部分都是32位的编译环境,甚至还有64位的。

在现在的32位的编译环境里,C语言提供的int是32位,所以这个时候long和int默认是一样大的,但是你可以去编译器的配置文件里面改。一般的来说,我们不用刻意根据数据大小去指定short和long,因为int是计算最快的类型,如果有太多short或long可能会拖慢程序的运行速度,毕竟现在随便一台电脑都有8GB内存,完全不用为了省这么点内存去省。

浮点数相对整数就有些不一样了,整数变量所有的位数都表示有效数字,可以精确表示出任意一个取值范围以内的整数;但是浮点数却不同,电脑储存浮点数的方式是科学计数法,整个变量中一部分内存用于存储指数,一部分用于存储有效数字,例如314.15可能会被存储为3.1415e2,其中31415和2是分开存储的,这就是为什么double和float的精准度会不一样。

C语言中的float

C语言中的double

至于这个e,就是科学计数法的意思,大写小写均可,e2就表示10的2二次方,e9就表示10的9次方,e-1就表示10的-1次方。

到了这里,有细心的小伙伴就要问了:

不是说int是32位吗,那为什么最大值只到231=2147483648呢?

因为电脑要拿出最前面一位用来存储符号,如果你不需要存储符号,可以使用类型unsigned int,加了前缀unsigned以后,变量中所有的位都会被用来存储数字,这样的变量类型叫做无符号类型,其他类型也是可以加unsigned前缀的。

不同体系下C语言对各种变量的内存分配

而变量的标识符就是指变量的名字,你需要给这个变量取个名。按照C语言的规则,这个名字只能由英文字母、数字、下划线组成,并且开头不可以是数字,不可以是C语言关键字,不能与其他自定义函数重名,不能创建仅有大小写区别的两个变量。

aA;//合法_a;//合法a2z;//合法2b;//不合法,不允许数字开头QAQ;//合法a(123zb;//不合法,有左半括号老夫子;//不合法,不能使用中文for;//不合法,是C语言关键字

C语言中一共有32个关键字,在此列出

目前我们只需要学会普通自动变量的使用即可,外部变量比较复杂,要引出变量声明、变量定义、变量内存分配的新问题,所以我们先暂时不用管它;而学习静态变量要顺便学习变量的作用域和生命周期,我们等后面整理到函数的时候再写。

图片 知乎@花兰西

END

发表评论

登录后才能评论