十二、进制

十二、进制

(1)进制

  • 基本介绍

    对于整数,有如下表示方式

    1. 2进制:0,1,满2进1.以0b或0B开头。
    2. 8进制:0-7,满8进1.以数字0o或者0O开头表示。
    3. 10进制:0-9,满10进1。
    4. 16进制:0-9及A(10)-F(15),满16进1.以0x或0X开头表示。此处的A-F不区分大小写
    # 2进制
    print(0b111)  # 7
    print(0B111)  # 7
    # 8进制
    print(0o111)  # 73
    print(0O111)  # 73
    # 10进制
    print(111)  # 111
    # 16进制
    print(0x111)  # 273
    print(0X111)  # 273
    
  • 进制的图示

    十进制 (Decimal) 二进制 (Binary) 八进制 (Octal) 十六进制 (Hexadecimal)
    0 0 0 0
    1 1 1 1
    2 10 2 2
    3 11 3 3
    4 100 4 4
    5 101 5 5
    6 110 6 6
    7 111 7 7
    8 1000 10 8
    9 1001 11 9
    10 1010 12 A
    11 1011 13 B
    12 1100 14 C
    13 1101 15 D
    14 1110 16 E
    15 1111 17 F
    16 10000 20 10
    32 100000 40 20
    64 1000000 100 40
    128 10000000 200 80
    255 11111111 377 FF

(2)进制的转换

  • 进制转换的介绍

  • 其它进制转十进制

    1. 二进制转换成十进制

      规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
      案例:请将 0b1011转成十进制的数

      image-20260701172758531

    2. 八进制转换成十进制

      规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
      案例:请将0o234转成十进制的数

      image-20260701173010055

    3. 十六进制转换成十进制

      规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
      案例:请将0x23A转成十进制的数

      image-20260701173109909

  • 十进制转其它进制

    1. 十进制转换成二进制

      规则:将该数不断除以2,直到商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。

      案例:请将34转成二进制 = 0b100010

      image-20260701173947583

    2. 十进制转换成八进制

      规则:将该数不断除以8,直到商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。

      案例:请将131转成八进制=0o203

      image-20260701174237983

    3. 十进制转换成十六进制

      规则:将该数不断除以16,直到商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。

      案例:请将237转成十六进制= 0xED

      image-20260701174355572

  • 二进制转换成八进制、十六进制

    1. 二进制转换成八进制

      规则:从低位开始,将二进制数每三位一组,转成对应的八进制数即可。

      案例:请将 ob11010101转成八进制

      image-20260701175642534

    2. 二进制转换成十六进制

      规则:从低位开始,将二进制数每四位一组,转成对应的十六进制数即可,

      案例:请将 ob11010101转成十六进制

      image-20260701175808894

  • 八进制、十六进制转成二进制

    1. 八进制转换成二进制

      规则:将八进制数每1位,转成对应的一个3位的二进制数即可。

      案例:请将0o237转成二进制

    image-20260701180206266

    1. 十六进制转换成二进制

      规则:将十六进制数每1位,转成对应的4位的一个二进制数即可。

      案例:请将0x23B转成二进制

      image-20260701180349304

(3)二进制在运算中的说明

  • 基本介绍
    1. 二进制是逢2进位的进位制,0、1是基本数字符号
    2. 现代的电子计算机技术全部采用的是二进制,因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。
    3. 计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1”,数字1在不同的位上代表不同的值。

(4)原码、反码、补码(重点难点)

  1. 二进制的最高位是符号位:0表示正数,1表示负数

    image-20260701185436862

  2. 正数的原码,反码,补码都一样(三码合一)

    image-20260701185626809

  3. 负数的反码=它的原码符号位不变,其他位取反(0->1 1->0)

    image-20260701185756047

  4. 负数的补码=它的反码+1,负数的反码= 负数的补码-1

    !image-20260701185833779

  5. 0的反码,补码都是0

  6. 在计算机运算的时候,都是以补码的方式来运算的

    image-20260701190357645

    image-20260701190743356

  7. 当我们看运算结果的时候,要看他的原码

(5)位运算符

运算符 名称 描述 示例(a=60, b=13)
& 按位与 (AND) 两个操作数对应位都为 1 时结果为 1 a & b = 120000 1100
| 按位或 (OR) 两个操作数对应位有一个为 1 时结果为 1 a | b = 610011 1101
^ 按位异或 (XOR) 两个操作数对应位相同为 0,不同为 1 a ^ b = 490011 0001
~ 按位取反 (NOT) 将操作数的每一位取反(0 变 1,1 变 0) ~a = -61(补码表示)
<< 左移 (Left Shift) 将操作数的二进制位向左移动指定位数,右侧补 0 a << 2 = 2401111 0000
>> 右移 (Right Shift) 将操作数的二进制位向右移动指定位数,左侧补符号位(算术右移) a >> 2 = 150000 1111
>>> 无符号右移 (Unsigned Right Shift) 将操作数的二进制位向右移动指定位数,左侧补 0(仅 Java/JavaScript 等) a >>> 2 = 15(同 >>,因 a 为正数)
  1. ~按位取反

    • ~规则:对数据的每个二进制位取反,即把1变为0,把0变为1

    • 分析 -2、2的结果是多少?

      image-20260701191958928

  2. &按位与

    • &规则:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

    • 分析2&3的结果是多少?

      image-20260701192115922

  3. ^按位异或

    • ^规则:当两个对应的二进位相异时,结果为日

    • 分析 2^-3的结果是多少?

      image-20260701192215503

  4. |按位或

    • |规则:只要对应的二个二进位有一个为1时,结果位就为1

    • 分析2|3的结果是多少?

      image-20260701192306069

  5. <<左移

    • <<规则:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,符号位不变,高位丢弃,低位补0

    • 分析 5<<1、-5<<1的结果是多少?

      image-20260701192643650

      x<<n = x*(2^n)

  6. >>右移

    • >>规则:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数,低位溢出,符号位不变并用符号位补溢出的高位

    • 分析5>>1、-5>>1 的结果是多少?

      image-20260701192937614

      x>>n = x//(2^n)

posted @ 2026-07-01 19:36  尘白  阅读(10)  评论(1)    收藏  举报