进制
计算机在储存数据的时候都是以二进制的形式去存的
a.十进制
基数:0~9
进位:逢10进1
每一位的值:123 = 1*100 + 2*10 + 3*1 = 1*10^2 + 2*10^1 + 3*10^0
111 = 1*10^0+1*10^1+1*10^2=111
b.十六进制:
基数:09,af(A~F)-->a(10),b(11),c(12),d(13),e(14),f(15)
进位:逢16进1
每一位的值:111=1*16^0+1*16^1+1*16^2=273
c.八进制
基数:0~7
进位:逢8进1
每一位的值:111 = 1*8^0+1*8^1+1*8^2 = 73
d.二进制
基数:0~1
进位:逢2进1
11011 = 1*2^0 + 1*2^1 + 1*2^2 +1*2^3 + 1*2^4 = 27
每一位的值:111 = 1*2^0+1*2^1+1*2^2=7
进制之间的转换
1.其他进制转换为10进制:每一位上的数乘以进制幂次数,然后求和
2.十进制转其他进制:辗转取余法
123: (2)1111011 60:(2)111100
123(8)173
123:(16)7B
3.二进制转8进制:每3位二进制转换成1位的8进制
8进制转2进制:一位8进制转换成3位的二进制
(8)671 --> (2)110111001
4.二进制转16进制:每4位二进制转换成1位
16进制转2进制:一位的16进制转换成4位的二进制
(16)67 -->(2)0110 0111
python对进制的支持
python支持二进制,八进制,十六进制
python中二进制,八进制,十六进制的表示:
二进制: 0b
通过添加前缀0b表示二进制,后面的数只能是0或1的组合
八进制:0o
通过添加前缀0o表示八进制,后面的数只能是0到7的组合
十六进制:0x
通过添加前缀0x表示十六进制,后面的数只能是0-9和a-f的组合
进制的转换函数:
bin(整数):将其他的进制转换为二进制
print(bin(10),bin(0o56),bin(0xaf))
#'0b1010', '0b101110', '0b10101111'
oct(整数):将其他的进制转换成八进制
print(oct(10),oct(0b110110),oct(0xaf))
#'0o12', '0o66', '0o257'
int(整数):将其他的进制转换成十进制,也可以将其他数据类型转换成整型
hex(整数):将其他的进制转换为十六进制
print(hex(10),hex(0b110110),hex(0o56))
#'0xa', '0x36', '0x2e'
原码反码和补码
:计算机在存数据的时候,存的是数字的二进制的补码
:计算机内存的最小单位是位:一位只能储存两个状态
8位 = 1字节
原码:数字的二进制形式
十进制的10的原码就是:1010
最高位是符合位,如果是正数符号位为0,负数符号位为1
10的原码 00000000 00001010
-10的原码 10000000 00001010
反码
正数的反码就是它的原码
负数数的反码就是这个数的原码的符号位不变,然后其他位置上的数取反(0->1,1->0)
-10 ->(原码)10000000 00001010 -->(反码)11111111 11110101
补码
正数的补码就是它的原码
负数的补码是它的反码加1
-10 --> (反码)11111111 11110101 -->(补码)11111111 11110110
总结:正的反码和补码都是原码;负数的补码是反码加1,反码是原码符号位不变,其他位取反
为什么计算机储存数据的时候存补码?:因为计算机中只有加法器,只能进行加操作。存原码对负数进行加操作的时候有问题
位运算
计算机存数字存补码,计算的时候也是补码,最后结果看的是原码
&(按位与):数字1 & 数字2:二进制的每一位,两个都为1结果才为1否则为0
3&2 --> 00000011 &00000010 ==00000010 --->2
-3 & 2 -->11111101 & 00000010 == 00000000
|(按位或):数字1 |数字2:只有有一个为1,结果就是1,两个都为0,结果才是0
3 | 2 ---> 00000011 |00000010 = 00000011. -->3
-3 |2 -->11111101 |00000010 = (补码)11111111 = (原码)10000001 --->-1
^(异或):数字1 ^ 数字2: 不同为1,相同为0
3^2 --> 00000011 |00000010 = 00000001 -->1
-3^2 --> 11111101 ^ 00000010 = (补)11111111 = 10000001 -->-1
~(取反):
~数字:将每一位取反
~3 -->~00000011 = 11111100(补) = 10000100 -->-4
~-3 --> ~11111101 = 00000010 --->2
<<左移(重点掌握):
数字 << 位数:将补码向左移指定的位数,后面用0补齐
规律(正书和负数都实用):m << n == m * (2^n)
num * 2 num << 1 num * 4 num << 2
右移>>:
数字 >> 位数:将补码向右移指定的位数,符号位不变,在符号位后面补指定格式的0(正)或者1(负)
规律(只适用于正数):m >> n == m // (2^n)
字符串(str)
通过'' '' ,' ' 引起来的字符集就是字符串
字符集:是各种不同的字符来组成的
Unicode编码
python中字符串中字符采用的是Unicode编码
Unicode编码,是通过两个字节来对一个字符进行编码,0~2^15(32768)。它几乎包含了世界所有的符号 Unicode码包含了ASCII码
ASCII码表:是通过一个字节来对一个字符进行编码
chr(数字)
获取数字在Unicode编码表中对应的字符,返回的是一个字符的字符串
ord(字符)
获取字符对应的Unicode码
可以直接在字符串中写字符串对应的编码值,格式:\u四位的十六进制
转义字符(适用于所有语言)
一些特殊功能和具有特殊意义的字符,直接放在字符串的引号中无效,需要通过\来转义
\n ---> 换行
' ---> '
\t ---> 制表符(tab)
\ -->
" ---> "
? --> ?