《看漫画学Python》笔记系列:三. 数字类型的数据;四.运算符
上一章: 一.准备出发 二.编程基础
三. 数字类型的数据
1.Python中的数据类型
python中有6种主要的内置数据类型:数字、字符串、列表、元组、集合和字典。
*列表、元组、集合和字典都是容器类型,只不过容器之间的内部结构不同。
不同的数据类型在计算机内部存储时会有所不同。不同的数据类型有时候不兼容,需要进行类型转换才可以计算,相同的数据类型是可以进行计算的
2. 数字类型
有4种数字类型:整数类型、浮点类型、复数类型和布尔类型。
(1)整数类型为int类,表示的是不带小数的数字。有四种进制表示方式,分别是十进制、二进制、八进制和十六进制。
(2)浮点类型为float类,有两种表示方式,一是小数,二是科学技术法。
(3)复数类型为complex类。
在计算机中被表示为a+bj,其中a称为实部,b称为虚部,j称为虚数单位。
两个复数可以进行相加,实部和实部相加,虚部和虚部相加,形成新的复数。
(4)布尔类型为bool类,只有两个值:True和False
布尔类型属于整数类型,或说布尔类型是整数类型的一个子类。
Python任何类型的数据都可以通过bool()函数转换为布尔值,那些“没有的”、“空的”值会被转换成False,反之转换为True。
3. 数字类型的相互转换
两种:隐式类型转换(自动转换)、显式类型转换(非自动)
比如,使用布尔类型的函数转换就是显式类型转换
<1>隐式类型的装换
看一个例子
<2>显式类型的装换
除复数外,三种数字类型如整数、浮点和布尔都有自己的转换函数,分别是int()、float()、和bool()函数
四.运算符
1.算术运算符
主要是针对数字类型的运算,但是有些运算符也可以用于字符串以及列表类型的运算。
*注意除和地板除法区别,除结果为float类型,地板除法结果为整数类型。注意下述例子中负数的地板除,注意True的大小写,注意True被当作整数1参与运算。
2.比较运算符
也称为关系运算符,结果为布尔值,即True或False
注意下方例子中浮点数与整数都可以进行比较
3.逻辑运算符
“逻辑与”与“逻辑或”具有短路特征
注意下方例子,在不进行短路计算,结果不确定时,f1()函数会被调用。而在进行短路计算,有确定结果时,f1()函数不会被调用。【def f1(): #定义一个函数,冒号后为函数内容】
5.位运算符
在计算机中,数据按照字节进行存放,1个字节为8位二进制数,此8位二进制数可以按位进行计算。
(1) ~ 取反 ,二进制数,不是0就是1,0取反就是1,1取反就是0。但!错啦!具体运算比较复杂,涉及到原码、补码、反码的问题。
公式:~a = (a + 1) x -1 ,比如下面例子中a十进制数9,则~a为-10,如a十进制数为-9,则~a为10
❶ 所以,你知道正负数的原码、补码、反码分别如何计算吗?❷你知道在上述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
6.赋值运算符
7.运算符的优先级
———————————————————————————————————
今天的学习就到这里,一起来看下帖中的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
下一章:...
- 点赞
- 收藏
- 关注作者
评论(0)