进制计数制

进位计数制

进制(数制)是表示数字的一种方式,它规定了数字的表示方法和运算规则。常见的进制包括二进制、八进制、十进制和十六进制。每种进制都有其特定的基数(即每个数位上可以使用的数字个数)和表示方法。

一、进制的基本概念

  1. 基数(Base)

    基数是指一个进制中可以使用的不同数字的个数。例如,十进制的基数是10,因为它使用0到9这10个数字。

  2. 数位(Digit)

    数位是指数字在数中的位置。每个数位上的值乘以该数位的权重(基数的幂)来确定其实际值。

  3. 权重(Weight)

    权重是指每个数位的值在整体数值中的贡献。权重通常是基数的幂。

    例如,在十进制数123中,

    数位3的权重是10^0

    数位2的权重是10^1

    数位1的权重是10^2

二、常见的进制

  1. 十进制(Decimal)

    • 基数:10

    • 数字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9

    • 表示方法:每个数位的值乘以10的幂。例如,十进制数123表示为:

      1×10^2+ 2×10^1+ 3×10^0=100+20+3=123

    • 特点:十进制是人类最常用的进制,因为它符合人类的自然计数习惯。

  2. 二进制(Binary)

    • 基数:2

    • 数字:0, 1

    • 表示方法:每个数位的值乘以2的幂。例如,二进制数1011表示为:

      1×2^3+ 0×2^2+ 1×2^1+ 1×2^0=8+0+2+1=11

    • 特点:二进制是计算机内部使用的进制,因为计算机的硬件电路只有两种状态(开和关,即0和1)。

  3. 八进制(Octal)

    • 基数:8

    • 数字:0, 1, 2, 3, 4, 5, 6, 7

    • 表示方法:每个数位的值乘以8的幂。例如,八进制数123表示为:

      1×8^2+ 2×8^1+ 3×8^0=64+16+3=83

    • 特点:八进制常用于早期的计算机系统中,因为每个八进制数位可以表示3个二进制数位,便于转换。

  4. 十六进制(Hexadecimal)

    • 基数:16

    • 数字:0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F(其中A=10, B=11, C=12, D=13, E=14, F=15)

    • 表示方法:每个数位的值乘以16的幂。例如,十六进制数1A3表示为:

      1×16^2+ A×16^1+ 3×16^0=256+160+3=419

    • 特点:十六进制常用于现代计算机系统中,因为每个十六进制数位可以表示4个二进制数位,便于转换和表示较大的数值。

三、进制之间的转换

  1. 二进制与十进制之间的转换

    • 二进制转十进制:将二进制数的每一位乘以对应的2的幂,然后求和。例如,二进制1011转换为十进制:

      1×2^3+ 0×2^2+ 1×2^1+ 1×2^0=8+0+2+1=11

    • 十进制转二进制:将十进制数不断除以2,记录每次的余数,直到商为0,然后将余数倒序排列。例如,十进制11转换为二进制:

      11÷2=5 余 15÷2=2 余 12÷2=1 余 01÷2=0 余 1

      余数倒序排列为1011。

  2. 二进制与八进制之间的转换

    • 二进制转八进制:将二进制数从右到左每3位一组,不足3位的在左边补0,然后将每组转换为对应的八进制数字。例如,二进制101101转换为八进制:

      101 101→5 5→55

    • 八进制转二进制:将八进制数的每一位转换为对应的3位二进制数。例如,八进制55转换为二进制:

      5→101 5→101

      结果为 101101

  3. 二进制与十六进制之间的转换

    • 二进制转十六进制:将二进制数从右到左每4位一组,不足4位的在左边补0,然后将每组转换为对应的十六进制数字。例如,二进制10110110转换为十六进制:

      1011 0110→B 6→B6

    • 十六进制转二进制:将十六进制数的每一位转换为对应的4位二进制数。例如,十六进制B6转换为二进制:

      B→1011 6→0110

      结果为 10110110

  4. 十进制与其他进制之间的转换

    • 十进制转八进制:将十进制数不断除以8,记录每次的余数,直到商为0,然后将余数倒序排列。例如,十进制83转换为八进制:

      83÷8=10 余 3

      10÷8=1 余 2

      1÷8=0 余 1

      余数倒序排列为123。

    • 十进制转十六进制:将十进制数不断除以16,记录每次的余数,直到商为0,然后将余数倒序排列。例如,十进制419转换为十六进制:

      419÷16=26 余 3

      26÷16=1 余 10(A)

      1÷16=0 余 1

      余数倒序排列为1A3。

  5. 小数部分的转换

    整数部分的转换使用除基取余法,小数部分的转换使用乘基取整法

    某些小数在不同进制下可能无法精确表示

    如:十进制75.3中的小数部分0.3转换成二进制

    0.3*2=0.6取整数部分0

    0.6*2=1.2取整数部分1

    0.2*2=0.4取整数部分0

    0.4*2=0.8取整数部分0

    0.8*2=1.6取整数部分1

    以此类推

    0.3二进制表示为01001……(无法精确表示只能无限接近)

四、进制的表示

1、常见的进制后缀

二进制(Binary)
后缀:通常使用b或B。
示例:1011b或1011B表示二进制数1011。
八进制(Octal)
后缀:通常使用o或O。
示例:123o或123O表示八进制数123。
十进制(Decimal)
后缀:十进制数通常不需要后缀,因为它是默认的进制。
示例:123或123d或123D表示十进制数123。
十六进制(Hexadecimal)
后缀:通常使用h或H。
示例:1A3h或1A3H表示十六进制数1A3。

2.编程语言

不同的编程语言对进制后缀的支持有所不同

  1. C/C++
    在C/C++中,通常使用前缀而不是后缀来表示不同进制的数字:
    二进制:不直接支持二进制字面量(C++20及以上版本支持0b前缀)。
    八进制:以0开头表示八进制。例如,0123表示八进制123。
    十六进制:以0x或0X开头表示十六进制。例如,0x1A3表示十六进制1A3。
  2. Python
    Python中也使用前缀来表示不同进制的数字:
    二进制:以0b或0B开头。例如,0b1011表示二进制1011。
    八进制:以0o或0O开头。例如,0o123表示八进制123。
    十六进制:以0x或0X开头。例如,0x1A3表示十六进制1A3。
  3. Assembly(汇编语言)
    在汇编语言中,后缀的使用更为常见,具体取决于具体的汇编器和指令集:
    二进制:b或B。例如,1011b。
    八进制:o或O。例如,123o。
    十六进制:h或H。例如,1A3h。

五、进制在计算机中的应用

  1. 二进制
    计算机硬件使用二进制来表示数据和指令,因为电子元件只有两种状态(0和1),这与二进制的特性完全匹配。
  2. 八进制
    • 早期计算机系统:在早期的计算机系统中,八进制被广泛使用。这是因为早期计算机的字长(如12位、16位、24位等)通常是3的倍数,八进制可以很好地表示这些字长的数据。例如,一个12位的二进制数可以分为4组,每组3位,每组可以用一个八进制数字表示。
    • 权限表示:在Unix和类Unix系统中,文件权限常常用八进制表示。例如,权限755表示所有者有读、写、执行权限(7),组用户有读和执行权限(5),其他用户也有读和执行权限(5)。
  3. 十六进制
    • 现代计算机系统:十六进制在现代计算机系统中被广泛使用,因为现代计算机的字长通常是4的倍数(如16位、32位、64位等)。十六进制可以更简洁地表示较长的二进制数。例如,一个32位的二进制数可以用8个十六进制数字表示。
    • 内存地址表示:在调试程序或查看内存地址时,十六进制常用于表示内存地址。例如,内存地址0x12345678是一个32位地址的十六进制表示。
    • 颜色编码:在网页设计和图形编程中,十六进制常用于表示颜色。例如,#FF0000表示红色,#00FF00表示绿色,#0000FF表示蓝色。

六、真值和机器数

真值:实际带正负的数

机器数:把正负号转换后的数字

#计算机组成原理-笔记-003

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值