c语言手动实现十进制数转换为二进制数。_数制与数制转换 || 数电

本文详细介绍了数制的概念,包括十进制、二进制、八进制和十六进制,并重点阐述了数制之间的转换。对于二进制与十进制的转换,提供了提取2的幂法和基数连乘、连除法。此外,还提及了转换过程中需要注意的精度问题,如十进制小数转换为二进制时的位数需求。
摘要由CSDN通过智能技术生成

数制与数制转换

81b5852d56473edb90e0cbd4914a29c1.png

数制是用一组固定的符号和统一的规则来表示数值的方法。

在数值计算中,一般采用进位计数制:用进位的方法进行计数。

在日常生活中,人们习惯使用十进制。而在数字系统中常采用二进制。

为了阅读与书写的方便,在数字系统中还使用八进制和十六进制。

在进位计数制中,数的表示涉及两个基本问题:基数

下面首先看一下我们最熟悉的数制:十进制。

一、数制

1.十进制

十进制是我们每天都在使用的一种数制,它具有如下特点:

  1. 十进制采用十个计数符号:0,1,2,3,4,5,6,7,8,9
  2. 十进制采用逢十进一的进位规则。(由于十进制采用十个计数符号和逢十进一的进位规则,因此十进制的基数为10)
  3. 十进制采用位置计数法。即同一个符号在不同的位置时,它所代表的数值是不同的。 如下图,其中整数部分第四位的"1"代表的数值为1000,第二位的"1"代表的数值为10。

01065ba4ab804aeb46c460a0ad4152a7.png

我们为十进制数中的每一个计数符号位分配一个基数10的整数次幂。整数的为10的正次幂,从10的零次方开始,从右向左递增;小数的权为10的负次幂,从10的-1次方开始,从左向右递减。 则任何一个十进制数D,可以表示为加权系数之和。

a9713b056c6a68ddde2955a20757fb20.png

其中,n为整数位个数,m为小数位个数,di为第i位的计数符号,称之为系数(上面这个臭臭公式可以不看,ta太抽象了)。

2.二进制

下面我们来看二进制。

  1. 二进制有两个计数符号:0,1
  2. 进位规则为逢二进一,因此基数为2.
  3. 与十进制一样,二进制采用位置计数法。 如下图,不同位置的"1"代表的值是不同的。从左到右四个1分别代表2的2次方,2的0次方,2的-1次方和2的-2次方。

8c8ce51e5ac447544510fc0e3e80381c.png

我们为二进制数中的每一个计数符号位分配一个权,权为基数2的整数次幂。整数的权为2的正次幂,从2的0次方开始,从右向左递增;小数的权为2的负次幂,从2的-1次方开始,从左向右递减。 则任何一个十进制数B,可以表示为加权系数之和。

66d34e2c31f816299572874e768532af.png

其中,n为整数位个数,m为小数位个数,bi为第i位的计数符号,称之为系数(上面这个臭臭公式可以不看,ta太抽象了)。

3.十六进制

和前面两个数制类似,我就直接盗图了。

866235a2beb46adc117ad1d4e8ced53a.png

4.八进制

d915df33fee04685afa4d1a76f02a249.png

二、数制转换

前面我们介绍了几种数制,它们之间可以互相转换。

下面介绍二进制数和十进制数之间的转换。

我们知道,二进制数可以表示为加权系数之和,因此把加权系数之和的表达式展开,然后按照十进制数运算规则进行运算,就可以求得等值的十进制数。例如下图所示,

8daa5420bb824265942ee4b64c0c78b6.png

另外还有基数连乘、连除法,实现二进制数到十进制数的转换,此处不作介绍。

反过来怎样把十进制数转换为二进制数呢?

第一种方法叫做提取2的幂法,它是刚刚讲过的,用按权展开法把二进制数转换为十进制数运算过程的逆过程。也就是将十进制数分解为加权系数之和。

0bb59d6b0793cd89453b41f28aa501d1.png

第二种方法是基数连乘、连除法。

十进制数的整数部分采用连除法,即,把十进制整数连续除以2,直到商等于零,然后 把每次所得余数按相反次序排列,就可以得到等值的二进制数。例如下图所示。

09423b2a8dc08e89480ed3bf192b54d5.png

十进制数的小数部分采用连乘法,即,把十进制小数连续乘以2,直到小数部分等于零或者达到规定的位数。然后把每次所得整数按序排列,就可以得到等值的十进制数。例如下图所示。

c3ee5fd9464eeba48398b001bd771929.png

需要注意的是,不是每一个十进制小数连续乘以2,最后都可以导致小数部分等于0,此时应该采用等精度的有效位数表示方法。

可以推导,一个m位的十进制小数,需要(3m+1)位二进制小数才能保持等精度。(我也不知道啦,先背过再说)。例如十进制数0.37,需要7位二进制数0.0101111来表示。

数制与转换部分就到这里结束了。

参考视频链接:第一单元 数字逻辑基础-第一讲 数制-视频1

顺便放一个用C语言来实现求补码的文章-[关于求负数补码](关于求负数补码 - 剑冢、 - 博客园)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值