进位计数制及其转换

简介:

 

十进制数

进位计数制是一种计数的方法,习惯上最常用的是十进制计数法。十进制数的每位数可以用下列10个数码之一来表示:0123456789。十进制数的基数为10,基数表示进位制所具有的数码的个数。

十进制数的计数规则是“逢十进一”,也就是说,每位累计不能超过9,计满10就应向高位进1

N10=(an-1an-2…a1a0a-1a-2…a-m)10

(N)10=an-1*10n-1+an-2*10n-2+…+a1*101+a0*100+a-1*10-1+a-2*10-2+…+a-m*10-m

1.2.2二进制数、把进制数和十六进制数

计算机中为了便于存储及计算的物理实现,采用了二进制。二进制数的基数为2,只有01两个数码,其计数规则是“逢二进一”,即每位计满2就向高位进1.它的各位的权是以2i表示的。

N2=(an-1an-2…a1a0a-1a-2…a-m)2

(N)2=an-1*2n-1+an-2*2n-2+…+a1*21+a0*20+a-1*2-1+a-2*2-2+…+a-m*2-m

 

 

把进制数的基数是8,采用的数码是01234567。把进制数的计数规则是“逢八进一”,它的各位的权是以8i表示的。通常,对八进制数的表示,可以在数字的右下角标注8O,但在C语言中是在数的前面加数字O表示。

 

把进制数的基数是16,采用的数码是0123456789ABC

DEF。其中ABCDEF分别表示十进制数数字101112131415。十六进制的计数规则是“逢十六进一”,它的各位的权是以16i表示的。通常,对十六进制的数的表示,可以在数字的右下角标注16H,但在C语言中是在数的面前加数字0和字母X0X来表示。

 

 

由此得出:十进制、八进制、二进制与十六进制的特征对照表如表所示:

 

进制

数码

计数规则

数的表示法

十进制

0~9

逢十进一

123410

二进制

01

逢二进一

1012

八进制

0~7

逢八进一

34678

十六进制

0~9A~F

逢十六进一

46AF16

 

 

 

<>二进制数和十进制数的转换

1.       二进制转换为十进制数

例如:

11101.012=1*24+1*23+1*22+0*21+1*20+0*2-1+1*2-2=16+8+4+0+1+0+0.25=29.2510

 

2.       十进制转换为二进制数

1)整数部分转换

把要转换的十进制数的整数部分不断除以基数2,并记下余数,直到商为0为止。

N10=(123)10

123/2=61          (a0=1)                          最低整数位

61/2=30            (a1=1)

30/2=15            (a2=0)

15/2=7               (a3=1)

7/2=3                 (a4=1)

3/2=1                 (a5=1)

1/2=0                 (a6=1)                          最高整数位

(N)10=(1111011)2

2)小数部分转换

N10=(0.468)10

<>二进制数、八进制数和十六进制数的转换

(2)小数部分转换

对于被转换的十进制数的小数部分则应不断乘以基数2,并记下其整数部分,直到结果的小数部分为0为止。

N10=0.94510

N10=0.812510

0.8125*2=1.625       (b1=1)                最高小数位

0.625*2=1.25  (b2=1)

0.25*2=0.5       (b3=0)

0.5*2=1.0         (b4=1)                最低小数位

(N)10=(0.1101)2

在十进制的小数部分转换中,有时连续乘以2不一定能使小数部分等于0,这说明该十进制小数不能用有限位二进制小数表示。这时,只要取足够多的位数,使其误差达到所要求的精度就可以了。

(N)10=(123)10

123/8=15         (a0=3)       最低整数位

15/8=1               (a1=7)

1/8=0                 (a2=1)       最高整数位

(N)10=(165)8

(N)10=(0.8125)8

0.8125*8=6.5  (b1=6)最高小数位

0.5*8=4.0         (b2=4)最低小数位

(N)10=(0.64)8

二进制数、八进制数和十六进制数的转换

八进制数的基数是88=23),十六进制数的基数是1616=24)。二进制数、八进制数和十六进制数之间具有2的整指数倍的关系,因而可直接进行转换。

 

1.二进制数-->八进制数

 

从小数点开始,分别向左右按3位分组转换成对应的八进制数字字符,最后不满3位的,则需补0

 

具体方法为:

 

二进制数:  001  101  101  .   101   010

八进制数:   1       5    5         5     2

 

(001101101.101010)2=(155.52)8

 

 

八进制数-->二进制数

 

将每位八进制数用3位二进制数表示即可。

 

将八进制数(345.648转换成二进制数

 

具体方法为:

八进制数:     3       4       5 . 6    4

二进制数:     011     100     101  110   100

 

345.648=11100101.11012

 

3.二进制数-->十六进制数

 

从小数点开始,分别向左、右按4位分组转换成对应的十六进制数字字符,最后不满4位的,则需补0.

 

将二进制数(1101101.101012转换成十六进制数

具体方法为:

二进制数:0110     1101         .        1010         1000

十六进制数: 6       D             A       8

1101101.101012=(6D.A8)16

 

 

4.十六进制数-->二进制数

 

将每位十六进制数用4二进制数表示即可。

将十六进制数(A8D.6C16 转换成二进制数。

具体方法:

十六进制数:         A                8                D                .                 6                C

二进制数:        1010   1000        1101           0110     1100

 

(A8D.6C)16=(101010001101.011011)2

 

其实,BCD编码在中国大陆称之为“8421,用8421码二进制数与八进制数、十进制数、十六进制数相互转换










本文转自 chen138 51CTO博客,原文链接:http://blog.51cto.com/chenboqiang/407314,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
存储 Java
BigDecimal类型的数据如何保留小数点后四位
BigDecimal类型的数据如何保留小数点后四位
174 0
西门子S7-1200的转换指令、取整和截取指令、上取整和下取整指令、标定和标准化指令,各参数的含义是什么?
西门子S7-1200中的转换指令包括转换指令、取整和截取指令、上取整和下取整指令、标定和标准化指令。
西门子S7-1200的转换指令、取整和截取指令、上取整和下取整指令、标定和标准化指令,各参数的含义是什么?
|
3月前
|
C语言
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
这篇文章展示了如何使用栈(包括顺序栈和链栈)实现将十进制数值转换成八进制数值的方法,通过C语言编程演示了两种栈的实现方式和使用场景。
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
|
5月前
|
C#
C# 版本的 计时器类 精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出
这篇2010年的文章是从别处搬运过来的,主要包含一个C#类`TimeCount`,该类有多个方法用于处理时间相关的计算。例如,`GetMaxYearCount`计算以毫秒为单位的最大年数,`GetCurrentTimeByMiliSec`将当前时间转换为毫秒,还有`SecondsToYYMMDDhhmmss`将秒数转换为年月日时分秒的字符串。此外,类中还包括一些辅助方法,如处理小数点后保留一位数字的`RemainOneFigureAfterDot`。
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
【Leetcode -748.最短补全词 -762.二进制表示中质数个计算置位】
50 0
|
6月前
将毫秒数量转换为时分秒字符串(毫秒数→转换为→00:00:00.000或00天00时00分00秒000毫秒形式)
将毫秒数量转换为时分秒字符串(毫秒数→转换为→00:00:00.000或00天00时00分00秒000毫秒形式)
|
6月前
leetcode-338:比特位计数
leetcode-338:比特位计数
35 0
|
11月前
【408计算机组成原理】—进位计数制(二)
【408计算机组成原理】—进位计数制(二)
|
存储 程序员
5.1.1_进位计数制
计算机组成原理之进位计数制
241 0
|
C++ iOS开发
【C++之标准类型数据的格式输出1】输入一批数值,要求保留3位小数,且上下行小数点对齐
【C++之标准类型数据的格式输出1】输入一批数值,要求保留3位小数,且上下行小数点对齐