python学习笔记08 python中的进制、进制转换、原码反码补码

上一篇记录中我们学习了python中的列表、元组、字典、集合,以及他们的常用功能。
python中的列表、元组、字典、集合
这一篇我们来介绍python中的进制、进制转换、原码反码补码

进制

整数的几种进制表示法

二进制: 由0,1构成,逢2进1,以0b开头

八进制: 由0,1,2,3,4,5,6,7构成,逢8进1,以0开头

十进制: 由0,1,2,3,4,5,6,7,8,9构成,逢10进1,默认就是10进制

十六进制:由0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,逢16进1,以0x开头

  • 如何从其他进制转10进制

    十进制转十进制
    
    十进制:12345
    
    12345=10000+2000+300+40+5
    
    ​		   =1\*10^4+2\*10^3+3\*10^2+4\*10^1+5\*10^0
    
    =10000+2000+300+40+5
    
    =12345
    
    规律口决:	系数*进制的幂次方之和
    
    
    
    二进制:0b10011
    
    10011=>1\*2^4+0\*2^3+0\*2^2+1\*2^1+1\*2^0=16+2+1=19
    
  • 如何从10进制转其他进制

    除基取余,直到商为0,余数反转

    十进制:108		二进制:0b1101100
    108/2=54......0
    54/2=27 ......0
    27/2=13 ......1
    13/2=6	......1
    6/2=3	......0
    3/2=1	......1
    1/2=0	......1
    
  • 如何从其他进制转其他进制

  • 拆分组合法[只适合二进制转八进制或者16进制]

  • 二进制转八进制,从右往左,每3位一组合,每个组合算自己的10进制结果,拼接

  • 二进制转十六进制,每4位一组合,每个组合算自己的10进制结果,拼接

    二进制:0b1101100	八进制:0154
    
    100--->4
    101--->5
    001--->1
    
    二进制:0b1101100	十六进制:0x6c
    
    1100--->12
    0110--->6
    
  • 先转10进制,再转其他进制

  • 原码 反码 补码
  • 计算机所有数据的运算采用的是补码进行的

  • 原码 反码 补码均是数据的二进制的形式

    原码:
        正数:数值位就是二进制的表现形式,最高位符号位就是0
        负数:数值位和正数保持一致,但是最高符号位为1
    举例:
    	3的原码:
    	1. 3的二进制:11
    	2. 3的原码: 00000011
    	-4的原码:
    	1. 4的二进制:100
    	2. -4的原码: 10000100
        
    反码:
    	正数:和原码保持一致
    	负数:符号位原码保持一致,数值位按位取反
    举例:
    	3的反码: 00000011
    	-4的反码:11111011
        
    补码:
    	正数:和原码保持一致
    	负数:是反码的基础之上末尾+1
    举例:
    	3的补码: 00000011
    	-4的补码:11111100
        
    
    
    举例:-4+3 = -1
    -4的补码+3的补码:
    	 00000011
    +	 11111100
    	-----------
    补码:11111111
    我们最终看到的结果是转原码再转10进制之后的结果 -1
    
    已知补码求原码:
    符号位 数值位
    补码: 1 1111111
    反码: 1 1111110
    原码: 1 0000001
    --------------------------
    数值位转10进制:1,又因为最高位是1,所以是负数,索引最终的结果是 -1
    
  • 3的补码: 00000011
    -4的补码:11111100
    a = 3
    b = -4
    print(a & b) # 0 有0则0
      00000011
    & 11111100
    ------------------
      00000000
        
    print(a | b) # -1 有1则1
       	 00000011
    | 	 11111100
    -----------------
    补码:11111111
    
    已知补码求原码
    补码: 11111111
    反码: 11111110
    原码: 10000001
    ----------------
    结果: -1
    
    print(a ^ b) # -1 相同则0,不同则1
       	 00000011
    & 	 11111100
    -----------------
    补码:11111111
    
    已知补码求原码
    补码: 11111111
    反码: 11111110
    原码: 10000001
    ----------------
    结果: -1
    
    print(~ b) # 3
    ~ 11111100
    -------------
      00000011
        
    12的补码: 00001100
    -12的补码:11110100
    print(12<<2) 左移,左边多的位丢弃,右边用0补齐,左移n位相当于*2^n
    		00001100
    左移2位 (00)00110000
    --------------------
    00110000 -> 32+16 = 48
    print(-12<<2) # -48
    
    print(12>>2) 右移,右边多的位丢弃,左边若最高位是0就用0补齐,若最高位是1就用1补齐,右移相当
    于除以2^n次方
    		  00001100
    右移2位 00000011(00)
    ---------------------------
    结果:3
    print(-12>>2) # -3
    

    学习完了补码,我们就可以介绍python中的位运算符了。
    下回我们将认识python中的各类运算符,点赞收藏关注,一起打卡python学习吧

    作者:伊一大数据&人工智能学习日志

    物联沃分享整理
    物联沃-IOTWORD物联网 » python学习笔记08 python中的进制、进制转换、原码反码补码

    发表回复