重新开始,计算机学习手记(一)变量与数据类型

1 篇文章 0 订阅
1 篇文章 0 订阅

今天开始写博客,算是多年以来东拼西凑学习计算机的一个总结。

我学习的编程语言也不多,也就是会一点点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为例

        (11001)_{2}=1\times2^4+1\times2^3+0\times2^2+0\times2^1+1\times2^0=16+8+0+0+1=(25)_{10}

在计算机中取负值的方式与现实中不同。

负整数则是-1后取反,按照正整数的方式计算后,加上负号。这是由于负号在计算机中是以一长串的1作为标记的。 

依然以上面的数字为例,假定存储数字的长度是八位,则二进制将表达为(1110 0111)。将其转化为十进制,表达转化的过程如下:

        (11100111)_2\Rightarrow (11100110)_2\Rightarrow (11001)_2 \Rightarrow (25)_{10}\Rightarrow (-25)_{10}

过程为:消去补码,取反,转换为十进制数字,添加负号。

十进制转二进制:

采用目标数除2取余的方式进行转换,即数字除以2后,余数放在相应的位置上。

以十进制数字25为例:

        (25)_{10} \Rightarrow 25\div2=12\cdots1 \Rightarrow 12\div2=6\cdots0 \Rightarrow6\div2=3\cdots0\Rightarrow3\div2=1\cdots1\Rightarrow1\div2=0\cdots1

将余数从后向前排列后,形成二进制数字(11001)_2

负整数的转化方式为,取绝对值,转化为二进制数字,取反,补码。

小数部分:

二进制转十进制:

正小数跟正整数一样,也是按权展开求和,即相应的位数i的数字乘以2的(i-1)次方的和。这里,小数点后第一位为0号位。

以二进制数字0.11001为例,

        (0.11001)_2=1 \times 2^{-1}+1 \times 2^{-2}+0 \times 2^{-3}+0 \times 2^{-4}+1 \times 2^{-5}=\frac{1}{2}+\frac{1}{4}+\frac{0}{8}+\frac{0}{16}+\frac{1}{32}=0.5+0.25+0+0+0.03125=(0.78125)_{10}

十进制转二进制:

采用目标数乘2取整的方式进行转化,及数字乘以2后,取整数位放在相应的位置上。

依然以小数0.78125为例

(0.78125)_10 \Rightarrow 0.78125\times2=1.5625 \Rightarrow 0.5625\times2=1.125 \Rightarrow 0.125\times2=0.25 \Rightarrow 0.25\times2=0.5\Rightarrow 0.5\times2=1

将取出的整数依次放在小数点后面,就会形成二进制数字(0.11001)_2

同时,以十进制的0.1为例,按照算法会形成如下的情况

        (0.1)_{10} \Rightarrow 0.1\times2=0.2 \Rightarrow 0.2\times2=0.4 \Rightarrow 0.4\times2=0.8\Rightarrow 0.8\times2=1.6\Rightarrow 0.6\times2=1.2 \Rightarrow 0.2\times2=0.4 \cdots

这里我们可以发现,在转化的过程中,我们在小数点后第6位就开始发生了循环,因此表达为二进制的数字就是(0.0\dot{0}\dot{0}\dot{1}\dot{1})_2是个无限循环小数。

列表型:

与之前的基本类型不同,列表型数据是一种有序的集合类型数据,里面可以包含许多可重复的元素,元素类型用逗号‘,’隔开,而其中元素的类型不受限制。列表型数据可以进行操作,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 = {}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值