今天开始写博客,算是多年以来东拼西凑学习计算机的一个总结。
我学习的编程语言也不多,也就是会一点点Python3和MySQL,略微了解一些数据库和服务器的知识。
这个系列叫重新开始,就是从头开始,整理自己利用业余时间弄电脑的一个总结。我这里以python3为主要的编程语言,来梳理和对比其他语言。
在第一篇里,我打算从一些基础的事情说起,也算是为一些小白读者提供一些参考。
先说一遍,我不是大佬,就是个学东西东拼西凑的萌新,对计算机工程的汪洋大海,我仅仅只是沾了一鞋湿,如果写的内容让各位大佬觉得东一榔头西一棒子,还请见谅。
关于变量和数据类型:
那么先从几乎所有计算机语言都会遇到的最基础的概念——变量说起。
众所周知,当前的主流二进制通用计算机只认识0跟1两个符号。在现实中,我们为了要利用电脑做各种事情,需要在电脑内存里面找出一个空间,做上标签,存放内容,这样方便未来查找、调用更改或者删除里面的数据。这个电脑内存里面标注特定空间的“标签”就是变量,空间中存放的内容就是数据。一般我们是通过这个“标签”来确定数据类型的。
数据类型大致分为字符、数字、列表、集合、字典、时间等几大类。其中最基础的就是字符和数字,列表、字典和时间等数据类型在一些编程语言中不存在,需要单独构建。
字符型:
最基础的数据类型之一,其中有字符串和字符两种称呼,本质上是一串二进制的数字,当其对应不同的字符集(charset)时,就会翻译成不同的文字,因此,如果字符集不同,那么显示出来的内容就不同。
Python3中字符串的类型标记为“str”,根据不同的语言,字符常见的数据类型标记为str,string,char,varchar,text等。
在标注字符内容的时候需要用“单引号”或者“双引号”括起来,无长度限制。
aStrVariable = 'this is a str'
anotherStrVariable = "this is also a str"
aNulStr = ''
数字型:
本质上是一串二进制的数字,我们看到的十进制的数字是转化过来的。由于二进制转换为十进制的公式中,整数部分和小数部分公式不同,而十进制的有限小数在二进制中表现为无限循环小数,例如十进制中的0.1,在二进制中就是无限循环小数0.00011...,而计算机CPU中的累加器的位数又有限,只能取到有限的位数,因此两者并不严格相等。
在数字型介绍的结束部分,我会附上二进制跟十进制之间的相互转换的算法。
整数:Python3中的类型标记是“int”,是英语整数integer的缩写,在其他语言中,根据数字的长度不同,常见的标记为short,int,long等。
浮点数:常见的一种小数类型,Python3中的类型标记是“float”,其他语言中,根据精度不同,常见的标记为float,double等。
定点数:常见的一种小数类型,Python3中无基础定义,需要引用decimal库实现。其他语言中的类型标记是decimal。
浮点数与定点数的区别,主要体现在机器中小数点的位置是否固定,在固定小数点的情况下,即定点数的精度可以保证,同时会面临内存溢出的风险。在小数点不固定的情况下,即浮点数,不需要考虑内存溢出的问题,但是会造成数字的精度下降。
这里会定义一个整数跟浮点数的例子:
aIntVariable = 25
aFloatVariable = 0.78125
这里附加一下二进制跟十进制之间的公式转换:
整数部分:
二进制转十进制:
正整数是按权展开求和,即相应的位数i的数字乘以2的(i-1)次方的和。
以二进制数字11001为例
在计算机中取负值的方式与现实中不同。
负整数则是-1后取反,按照正整数的方式计算后,加上负号。这是由于负号在计算机中是以一长串的1作为标记的。
依然以上面的数字为例,假定存储数字的长度是八位,则二进制将表达为(1110 0111)。将其转化为十进制,表达转化的过程如下:
过程为:消去补码,取反,转换为十进制数字,添加负号。
十进制转二进制:
采用目标数除2取余的方式进行转换,即数字除以2后,余数放在相应的位置上。
以十进制数字25为例:
将余数从后向前排列后,形成二进制数字。
负整数的转化方式为,取绝对值,转化为二进制数字,取反,补码。
小数部分:
二进制转十进制:
正小数跟正整数一样,也是按权展开求和,即相应的位数i的数字乘以2的(i-1)次方的和。这里,小数点后第一位为0号位。
以二进制数字0.11001为例,
十进制转二进制:
采用目标数乘2取整的方式进行转化,及数字乘以2后,取整数位放在相应的位置上。
依然以小数0.78125为例
将取出的整数依次放在小数点后面,就会形成二进制数字
同时,以十进制的0.1为例,按照算法会形成如下的情况
这里我们可以发现,在转化的过程中,我们在小数点后第6位就开始发生了循环,因此表达为二进制的数字就是是个无限循环小数。
列表型:
与之前的基本类型不同,列表型数据是一种有序的集合类型数据,里面可以包含许多可重复的元素,元素类型用逗号‘,’隔开,而其中元素的类型不受限制。列表型数据可以进行操作,Python3中的类型标记是“list”,在其他拥有列表类型的语言中,标记通常为list。形式为被方括号‘[]’括起来的一系列变量。
aList = [1,2,3,[3,2,1],'3']
aNulList = []
元组型:
元组的概念来自于关系型数据库,在Python3中表现形式和作用与列表型数据类似,但是,元组型数据只可读取,不可更改。Python3中的类型标记是“tuple”,其他含有元组类型数据的语言中,标记通常为tuple。形式为被圆括号()括起来的一系列变量。
aTuple = (1,2,3)
集合型:
集合型数据是一种无序的集合类型数据,里面包含许多不可重复的元素。Python3中的类型标记是“set”。形式为被花括号{}括起来的一系列变量。其中需要注意的一点是,建立一个空集合,不能直接写成 x={} ,要写成 x = set()。
aSet = {1,2,3,4,5}
aNulSet = set()
字典型:
字典型数据可以说是Python3的一大特色了,大多数语言中不存在这一种类型的数据,很多语言需要利用诸如json格式的文件,来实现Python3中字典型数据的功能。Python3中的类型标记是“dict”,表现形式为几个或许多键值对的集合,其中键表示数据的名称,位于冒号的左边,在字典中不可重复,值则是数据名称对应的值,位于冒号的右边,可重复。
aDict = {'a':1,'b':2,'c':3,'d':2,'e':1}
aNulDict = {}