《看漫画学Python》笔记系列:三. 数字类型的数据;四.运算符

举报
在逃coder 发表于 2022/03/28 09:32:54 2022/03/28
【摘要】 【摘要】 不断进阶是合格打工人的主旋律。 继续书籍记录总结,书名叫《看漫画学Python》,是继《图解HTTP》之后的第二本,都是漫画风格,结构全面,也轻松易读。 大家都知道 Python是一门既简单又强大的编程语言,被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。 很多人很羡慕编程大牛,希望自己也可以入门,但是不知道如何下手,今天我们接着一、二章内容继续进阶!

上一章: 一.准备出发 二.编程基础

    数字类型的数据

1.Python中的数据类型

               python中有6种主要的内置数据类型:数字、字符串、列表、元组、集合

               *列表、元组、集合和字典都是容器类型,只不过容器之间的内部结构不同。

              不同的数据类型在计算机内部存储时会有所不同。不同的数据类型有时候不兼容,需要进行类型转换才可以计算,相同的数据类型是可以进行计算的

2. 数字类型

              4种数字类型:整数类型、浮点类型、复数类型布尔类型

              (1)整数类型int类,表示的是不带小数的数字。有四种进制表示方式,分别是十进制、二进制、八进制十六进制

21.png

              (2)浮点类型float类,有两种表示方式,一是小数,二是科学技术法

22.png

              (3)复数类型complex类

              在计算机中被表示为a+bj,其中a称为实部,b称为虚部,j称为虚数单位。

              两个复数可以进行相加,实部和实部相加,虚部和虚部相加,形成新的复数。

              (4)布尔类型bool类,只有两个值:TrueFalse

              布尔类型属于整数类型,或说布尔类型是整数类型的一个子类。

              Python任何类型的数据都可以通过bool()函数转换为布尔值,那些“没有的”、“空的”值会被转换成False,反之转换为True

23.png

3. 数字类型的相互转换

              两种:隐式类型转换(自动转换)显式类型转换(非自动)

              比如,使用布尔类型的函数转换就是显式类型转换

              <1>隐式类型的装换

24.png

              看一个例子

25.png

              <2>显式类型的装换

              除复数外,三种数字类型如整数、浮点和布尔都有自己的转换函数,分别是int()、float()、和bool()函数

26.png

    四.运算符

1.算术运算符

27.png

              主要是针对数字类型的运算,但是有些运算符也可以用于字符串以及列表类型的运算。

              *注意除和地板除法区别,结果为float类型地板除法结果为整数类型。注意下述例子中负数的地板除,注意True的大小写,注意True被当作整数1参与运算。

28.png

2.比较运算符

              也称为关系运算符,结果为布尔值,即TrueFalse

29.png

              注意下方例子中浮点数与整数都可以进行比较

30.png

3.逻辑运算符

31.png

              “逻辑与”与“逻辑或”具有短路特征

32.png

              注意下方例子,在不进行短路计算,结果不确定时,f1()函数会被调用。而在进行短路计算,有确定结果时,f1()函数不会被调用。【def f1():  #定义一个函数,冒号后为函数内容】

33.png

5.位运算符

              在计算机中,数据按照字节进行存放,1个字节为8位二进制数,此8位二进制数可以按位进行计算。

34.png

              (1) ~ 取反 ,二进制数,不是0就是1,0取反就是1,1取反就是0但!错啦!具体运算比较复杂,涉及到原码、补码、反码的问题。

                   公式:~a = (a + 1) x -1 ,比如下面例子中a十进制数9,则~a-10,如a十进制数为-9,则~a10

                   ❶ 所以,你知道正负数的原码、补码、反码分别如何计算吗?❷你知道在上述9和-10的例子中,按位取反具体是如何运算的吗?

              【请耐心阅读,文末为大家解答哦~】

              (2) & :如果两个位都为1的情况下,结果为1只要一个为0,结果就位0

              (3)  | 只有一个为1的情况下,结果就为1

              (4)  ^ 如果一个是0,一个是1,结果就是1如果都是为1,或者都是为0,结果为0

              (5)>>右移:按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1

              如  00001010>>2=00000010;   10001010>>3=11110001

              右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。

              (6)<< 左移:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

              要求右操作数必须是非负值,在数字没有溢出的前提下,对于正数负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

              若a=15,即二进制数00001111,左移2位得00111100,没有1溢出,则左移两位相当于15乘2^2,15<< 2=60,即乘了4,即十进制数60。以下是左移两位溢出的高位中包含1的情况,64<<2为256。127<<2为508

39.PNG

6.赋值运算符

37.png

7.运算符的优先级

38.png

———————————————————————————————————

今天的学习就到这里,一起来看下帖中的2个问题。

❶ 问:你知道正负数的原码、补码、反码分别如何计算吗

首选请注意分清下概念:

  • 取反:逻辑非“!”,逻辑取反, false变true,true变false,在C中,只要不是0就是真,所以!5值是0
  • 反码:正数的反码是其本身,对于负数其符号位不变其它各位取反(0变1,1变0)
  • 按位取反(~): 按位取反1变0,0变1。

好了,现在解决问题疑问,请看机器数、真值、原码、反码、补码的相关定义

1、机器数

一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1.

比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。

那么,这里的 00000011 和 10000011 就是机器数。

2、真值

机器数的第一位是符号位,后边才是真正的数值,所以机器数的形式值就不等于真正的数值。例如上面的有符号数10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:

0000 0001的真值 = +000 0001 = +1

1000 0001的真值 = –000 0001 = –1

3. 原码

原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:

[+1](原码) = 0000 0001

[-1](原码) = 1000 0001

第一位是符号位。因为第一位是符号位,所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]。即[-127 , 127]

原码是人脑最容易理解和计算的表示方式。

4. 反码

反码的表示方法是: 正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。

[+1] = [00000001](原码)= [00000001](反码)

[-1] = [10000001](原码)= [11111110](反码)

可见如果一个反码表示的是负数,人脑无法直观的看出来它的数值。通常要将其转换成原码再计算。

5. 补码

补码的表示方法是:正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1 (即在反码的基础上+1)。

[+1] = [00000001](原码) = [00000001](反码) = [00000001](补码)

[-1] = [10000001](原码) = [11111110](反码) = [11111111](补码)

对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。

❷你知道在上述例子中,按位取反具体是如何运算的吗?如何得到9按位取反为-10,10按位取反为-9的?

(1)正数9按位取反——>(~9),计算步骤如下:

正数原码=反码=补码

所以9的原码/反码/补码: 0000 1001

对补码取反 1111 0110(符号位一起取反)

对其取反码: 1000 1001(符号位不变)

取补码: 1000 1010(反码+1)

最终结果  1000 1010,即-10

(2)负数-10按位取反——>(~10)

正数原码=反码=补码

-10 原码:1000 1010

-10反码: 1111 0101(符号位不变)

-10补码: 1111 0110(反码+1)

补码取反:0000 1001(符号位一起取反)

正好得到一个整数,正数原码、反码、补码都一样

所以最后结果 0000 1001,二进制为-9

特殊:0按位取反,即(~0)为-1

总结:按位取反公式:~a = (a + 1) x -1


下一章:...

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。