原码:原码是二进制数字的一种简单的表示法.二进制首位为符号位,1代表负,0代表正.
反码:反码可由原码得到.如果是正数,反码与原码相同;如果是负数,反码是其原码(符号位除外)各位取反而得到的.
补码:补码可由原码得到.如果是正数,补码与原码相同;如果是负数,补码是对其原码(除符号位外)各位取反,并在末位加1而得到的(有进位则进位,但不改变符号位).
python有按位取反的操作符:~ ? 但是对负整数要小心操作,因为在计算机系统中,数值一律用补码来表示和存储的.
python支持:数学运算符、逻辑运算符、比较运算符、赋值运算符、(位运算符)
其中:+、-、*、/,与数学中的加减乘除一样
整除(//),两数相除结果只取整数部分
取余(%),两数相除取余数
幂运算(**),x ** y 即为(求x的y次方)
可用于开方.如下:
注意:运算符的运算不一定非得是数据,也可是存数据的变量
所有比较运算符的值都是布尔值(False/True)
补充:is的使用
一个变量有三要素,分别是:类型(变量中存储的数据的类型)、值(变量中存储的数据)、
地址(变量存储的真正内容,数据的地址)
(==)和is的区别: *
注意:变量中若是存储的数据为数字和字符串,则地址相同
(变量中存储的数据为数字和字符串)示例:
与比较运算符的运算对象和值都是一样的,值都为布尔值
应用:要求同时满足多个条件的时候就用逻辑与运算
False or False -- False
运算技巧:只要存在True,则结果为True
应用:要求多个条件只要有一个条件满足就使用逻辑或运算
not False = True
not True = False
所有的赋值运算符,要求运算符的左边必须是变量;右边是有结果的(值)
其他赋值运算符中除(=)外,运算方法与以上一致
数学运算符 比较运算符 逻辑运算符 赋值运算符
优先级高的先算,优先级低的后算.如果有(),先算()里面的
数学运算符中的优先级:** *,/,%,// +,-
①int:包含所有的整数,支持十进制、二进制、八进制、十六进制
①.,认识字符串:
通过单引号或者双引号括起来的字符集(文本)就是字符串
什么是字符 :python中只有字符的概念,没有字符的类型,如果要表示一个字符,用一个长度是1的'字符串'来表示
字符串是不可变的,但是有序-->>(长度不可变,字符内容不可变,有序指的是每个字符在字符串中的位置是不变的)
容器型数据类型的特点:一个字符串中可以存储多个字符
注意: 1.没有阻止转义时,一个转义字符的长度是1
如下:
例如:
计算机在存储数据的时候只能存数字数据,而且存的是数字的二进制的补码
数字存储:列如 10— 转换成二进制 - 求补码(存储)
采用两个字节对字符进行编码,包含世界上所有的语言和符号,又称万国码).python采用的是Unicode编码表
函数应用:
但是python自带了方法 bin.
bin(number).replace('0b','')
更详细的介绍可参考 这篇文章
一般来讲,整形数在内存中是以 补码 的形式存放的,输出的时候同样也是按照 补码 输出的.
但是在 Python 中,情况是这样的:
所以为了获得十进制负数的补码,我们需要手动将其和 0xffffffff 进行与操作,得到一个十六进制数,再交给 bin() 转化,这时内存中得到的才是你想要的补码.
计算机中的正负数,其本身就是补码.
求补码,不需要你编程.
在你输入正负数时,键盘,以及操作系统,就已经
把正负数变换成补码,送到计算机内部存放起来了.
你不必多费这个心思.
python中的进制转换和原码,反码,补码
计算机文件大小单位
b = bit 位(比特)
B = Byte 字节
进制分类
python中的进制转换:
其他进制转换为十进制:int(相应进制)
其他进制转换为二进制:bin(相应进制)
其他进制转换为八进制:oct(相应进制)
其他进制转换为十六进制:hex(相应进制)
二进制 转化成 十进制:
例: 0b10100101
八进制 转化成 十进制:
十六进制 转化成 十进制:
例: 0xff
十进制 转化成 二进制:
在把每个阶段求得的余数从下到上依次拼接完毕即可
十进制 转化成 八进制:? ?
十进制 转化成 十六进制:? ?
在把每个阶段求得的余数从下到上依次拼接完毕即可.
原码,反码,补码
实际人们看到的数字是原码转化之后显示出来的.
而原码是通过补码得到的.
计算机的所有数据在底层都是以二进制的补码形式存储.
***进制转换的时候需要先把内存存储的补码拿出来变成原码在进行转换输出***
反码:二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换.
补码:用来做数据的存储运算,可以实现计算机底层的减法操作,因而提出(可以表达出一个数的正负).
乘法除法是通过左移和右移 来实现.
正数高位补0,负数高位补1.
正数:
原码 = 反码 = 补码
负数:
反码 = 原码取反(除高位)
补码 = 反码加1
反码 = 补码减1
原码 = 反码取反(除高位)
原码 = 补码取反加1
补码 = 原码取反加1
一个数在计算机中的二进制表示形式, 叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 叫符号位正数为0, 负数为1.
比如
正数1在计算机中的存储即为
0 00000000000000000000001
负数1 在计算机中的存储即为
①. 00000000000000000000001
一个正数,转换为二进制位就是这个正数的原码.负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码.
正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反.
正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1.
所以原码,反码,补码正数情况下是一致的,负数情况下是不一致的.
计算机的运算过程实际就是补码相加的一个过程.
①. 000000000000000000000000010
反码为:
①. 111111111111111111111111101
补码为:
①. 111111111111111111111111110
0 000000000000000000000000011
那么二者补码相加结果为
+
=
0 000000000000000000000000001
结果为1
①.的原码为
①.的反码为:
①.的补码为:
二者的补码相加结果为
①. 111111111111111111111111111
得出的补码转化为原码, 最低位减一得到反码,然后除符号位外所有位取反,得到结果
①. 000000000000000000000000001