m——小数的总位数。
d下标——表示该位的数码。
b——表示进位制的基数。
b上标——表示该位的位权。
2.计算机中常用的进位计数制
计数制 基数 数 码 进位关系
二进制 2 0、1 逢二进一
八进制 8 0、1、2、3、4、5、6、7 逢八进一
十进制 10 0、1、2、3、4、5、6、7、8、9 逢十进一
十六进制 16 0、1、2、3、4、5、6、7、8、9
A、B、C、D、E、F 逢十六进一
3.计数制的书写规则(1)在数字后面加写相应的英文字母作为标识。
如:二进制数的100可写成100B 十六进制数100可写成100H
(2)在括号外面加数字下标。 如:(1011)2 表示二进制数的1011
(2DF2)16 表示十六进制数的2DF2
2. 数制之间的转换(1)十进制整数转换为二进制整数
采用基数2连续去除该十进制整数,直至商等于“0”为止,然后逆序排列余数。
(2)十进制小数转化为二进制小数
连续用基数2去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。
(3)十进制整数转换为八进制整数或十六进制整数
采用基数8或基数16连续去除该十进制整数,直至商等于“0”为止,然后逆序排列所得到的余数。
(4)十进制小数转换为八进制小数或十六进制小数
连续用基数8或基数16去乘以该十进制小数,直至乘积的小数部分等于“0”,然后顺序排列每次乘积的整数部分。
(5)二、八、十六进制数转换为十进制数
用其各位所对应的系数,按“位权展开求和”的方法就可以得到。其基数分别为2、8、16。
(6)二进制数转换为八进制数
从小数点开始分别向左或向右,将每3位二进制数分成1组,不足3位数的补0,然后将每组用
1位八进制数表示即可。
(7)八进制数转换为二进制数
将每位八进制数用3位二进制数表示即可。
8二进制数转换为十六进制数
从小数点开始分别向左或向右,将每4位二进制数分成1组,不足4位的补0,然后将每组用一位十六进制数表示即可。
(9)十六进制数转换为二进制数
将每位十六进制数用4位二进制数表示即可
【例2.1】将十进制整数(105)10转换为二进制整数,采用“除2倒取余”的方法,过程如下:
2 |105
2 |52 余数为1
2 |26 余数为0
2 |13 余数为0
2 |6 余数为1
2 |3 余数为0
2 |1 余数为1
0 余数为1
所以,(105)10=(1101001)2

【例2.2】将十进制小数(0.8125)10转换为二进制小数,采用“乘2顺取整”的方法,过程如下:
0.8125×2=1.625 取整数位1
0.625×2=1.25 取整数位1
0.25×2=0.5 取整数位0
0.5×2=1.0 取整数位1
所以,(0.8125)10=(0.1101)2如果出现乘积的小数部分一直不为“0”,则可以根据精度的要求截取一定的位数即可。

【例2.3】将十进制整数(2347)10转换为十六进制整数,采用“除16倒取余”的方法,过程如下:
16 |2347
16 |146 余数为11(十六进制数为B)
16 | 9 余数为2
0 余数为9
他们都是计算机中数据的一种表示方法.
十进制是由0~9组成。
十六进制由0-9,A-F,组成.

16进制与10进制的对应关系是:

0-9对应0-9;

A-F对应10-15;

N进制的数可以用0---(N-1)的数表示超过9的用字母A-F


例如:

10进制的32表示成16进制就是:20

16进制的32表示成10进制就是:3×16^1+2×16^0=50

6.1 为什么需要八进制和十六进制?
 

编程中,我们常用的还是10进制……毕竟C/C++是高级语言。

比如:

int a = 100,b = 99;


不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。

但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:

0000 0000 0000 0000 0110 0100

面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。

 

用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为
什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?

2、8、16,分别是2的1次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现这一点
十进制就是09为一个循环

二进制就是0 1为一个循环

十六进制就是0 1 2 3 4 5 6 7 8 9 A B C D E F为一个循环

十进制

首先,现在人们日常 生活中所不可或离的十进位值制,就是中国的一大发明。至迟在商代时,中国已采用了十进位值制。从现已发现的商代陶文和甲骨文中,可以看到当时已能够用
一、二、三、四、五、六、七、八、九、十、百、千、万等十三个数字,记十万以内的任何自然数。这些记数文字的形状,在后世虽有所变化而成为现在的写法,但记数方法却从没有中断,一直被沿袭,并日趋完善。十进位值制的记数法是古代世界中最先进、科学的记数法,对世界科学和文化的发展有着不可估量的作用。正如李约瑟所说的:如果没有这种十进位制,就不可能出现我们现在这个统一化的世界了。

古巴比仑的记数法虽有位值制的意义,但它采用的是六十进位的,计算非常繁琐。古埃及的数字从一到十只有两个数字符号,从一百到一千万有四个数字符号,而且这些符号都是象形的,如用一只鸟表示十万。古希腊由于几何发达,因而轻视计算,记数方法落后,是用全部希腊字母来表示一到一万的数字,字母不够就用加符号”等的方法来补充。古罗马采用的是累积法,如用ccc表示300。印度古代既有用字母表示,又有用累积法,到公元七世纪时方采用十进位值制,很可能受到中国的影响。现通用的印度——阿拉伯数码和记数法,大约在十世纪时才传到欧洲。

在计算数学方面,中国大约在商周时期已经有了四则运算,到春秋战国时期整数和分数的四
则运算已相当完备。其中,出现于春秋时期的正整数乘法歌诀九九歌,堪称是先进的十进位记数法与简明的中国语言文字相结合之结晶,这是任何其它记数法和语言文字所无法产生的。从此,九九歌成为数学的普及和发展最基本的基础之一,一直延续至今。其变化只是古代的九九歌九九八十一开始,到二二如四止,而现在是由一一如一九九八十一

二进制

所谓二进制,也就是计算机运算时用的一种算法。二进制只有一和零组成。

比方说吧,你上一年级时一定听说过进位筒&“数位筒吧!十进制是个位上满十根小棒就捆成一捆,放进十位筒,十位筒满十捆就捆成一大捆,放进百位筒……二进制也是一样的道理,个位筒上满2根就向十位进一,十位上满两根就向百位进一,百位上满两根……

二进制是世界上第一台计算机上用的算法,最古老的计算机里有一个个灯泡,当运算的时候,
比如要表达,第一个灯泡会亮起来。要表达,则第一个灯泡熄灭,第二个灯泡就会亮起来。

随着科技的发展,二进制已经被八进制十六进制取代了。

二进制就是缝二进一,好比十进制,在十进制中,最大为9,没有十,当算到10时就要进一位,当前位归0,比如9+1=10,99+1=100。而二进制原理相同,基本运算字符只有01,即满21,当前位归0,1+1=1016进制而不为2,11+1=100而不为12,111+1=1000而不为112。同理,还有8进制,16进制,8进制中:7+1=10,17+1=20,77+1=100,等等。你可以参考一下相关的书目,如《计算机基本原理》。

十六进制

是计算机中数据的一种表示方法。同我们日常中的10进制表示法不一样。他由0-9,A-F,组成。与10进制的对应关系是:


0-9对应0-9;

A-F对应10-15;

例如:

10进制的32表示成16进制就是:20

16进制的32表示成10进制就是:3×16^1+2×16^0=50
数制定义:用一组固定的数字和一套统一的规则来表示数目的方法称为数制。数制有进位计数制与非进位计数制之分,目前一般使用进位计数制。
计算机中常使用二进制、十进制、八进制、十六进制等。
十进制数的数码为0、1、2、3、4、5、6、7、8、9共十个,进数规则为逢十进一,借一当十。
二进制数的数码为0、1共两个,进数规则为逢二进一,借一当二。
八进制数的数码为0、1、2、3、4、5、6、7共八个,进数规则为逢八进一,借一当八。
十六进制数的数码为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共十六个,其中数码A、B、C、D、E、F分别代表十进制数中的10、11、12、13、14、15,进数规则为逢十六进一,借一当十六。
8 1000 10 8 17 10001 21 11
十进制数换算成二进制、八进制、十六进制数
分整数部分的换算和小数部分的换算。
1)整数部分的换算
将已知的十进制数的整数部分反复除以nn为进制数,取值为2816,分别表示二进制、八进制和十六进制),直到商是0为止,并将每次相除之后所得的余数按次序记下来,第一次相除所得的余数K0n进制数的最低位,最后一次相除所得余数Kn-1n进制数的最高位。排列次序为Kn-1Kn-2 ××K1K0的数就是换算后得到的n进制数。
2)小数部分的换算
将已知的十进制数的纯小数(不包括乘后所得整数部分)反复乘以n,直到乘积的小数部分
0或小数点后的位数达到精度要求为止。第一次乘n所得的整数部分为K-1,最后一次乘n所得的整数部分为K-m,则所得n进制小数部分0.K-1 K-2 ××K-m
二进制数与八进制数的相互换算
二进制数换算成八进制数的方法是:以小数点为基准,整数部分从右向左,三位一组,最高位不足三位时,左边添0补足三位;小数部分从左向右,三位一组,最低位不足三位时,右边添0补足三位。然后将每组的三位二进制数用相应的八进制数表示,即得到八进制数。
八进制数换算成二进制数:将每一位八进制数用三位对应的二进制数表示。
二进制数与十六进制数的相互换算
以小数点为基准,整数部分:从右向左,四位一组,最高位不足四位时,左边添0补足四位;小数部分:从左向右,四位一组,最低位不足四位时,右边添0补足四位。然后将每组的四位二进制数用相应的十六进制数表示,即可得到十六进制数。
十六进制数换算成二进制数:将每一位十六进制数用四位相应的二进制数表示
十六进制举例说明
  例如:
  10进制的32表示成16进制就是:20
  16进制的32表示成10进制就是:3×16^1+2×16^0=50
  6.1 为什么需要八进制和十六进制?
  编程中,我们常用的还是10进制……毕竟C/C++是高级语言。
  比如:
  int a = 100,b = 99;
  不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
  但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:
  0000 0000 0000 0000 0110 0100
  面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。
  用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是168进制,而不其它的,诸如920进制呢?
  2816,分别是21次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现这一点。
  6.2 二、八、十六进制数转换到十进制数
  6.2.1 二进制数转换为十进制数
  二进制数第0位的权值是20次方,第1位的权值是21次方……
  所以,设有一个二进制数:0110 0100,转换为10进制为:
  下面是竖式:
  0110 0100 换算成 十进制
  第0 0 * 2^0 = 0
  第1 0 * 2^1 = 0
  第2 1 * 2^2 = 4
  第3 0 * 2^3 = 0
  第4 0 * 2^4 = 0
  第5 1 * 2^5 = 32
  第6 1 * 2^6 = 64
  第7 0 * 2^7 = 0
  ---------------------------
  100
  用横式计算为:
  0 * 2^0 + 0 * 2^1 + 1 * 2^2 + 0 * 2^3 + 0 * 2^4 + 1 * 2^5 + 1 * 2^6 + 0 * 2^7 = 100
  0乘以多少都是0,所以我们也可以直接跳过值为0的位:
  1 * 2^2 + 1 * 2^3 + 1 * 2^5 + 1 * 2^6 = 100
  上面错的,改
  1 * 2^2 + 1 * 2^5 + 1 * 2^6 = 100
  4 + 32 + 64 =100
  6.2.2 八进制数转换为十进制数
  八进制就是逢81
  八进制数采用 07这八数来表达一个数。
  八进制数第0位的权值为80次方,第1位权值为81次方,第2位权值为82次方……
  所以,设有一个八进制数:1507,转换为十进制为:
  用竖式表示:
  1507换算成十进制。
  第0 7 * 8^0 = 7
  第1 0 * 8^1 = 0
  第2 5 * 8^2 = 320
  第3 1 * 8^3 = 512
  --------------------------
  839
  同样,我们也可以用横式直接计算:
  7 * 8^0 + 0 * 8^1 + 5 * 8^2 + 1 * 8^3 = 839
  结果是,八进制数 1507 转换成十进制数为 839
  6.2.3 八进制数的表达方法
  C,C++语言中,如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。
  所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在CC++中的表达方法。
  由于CC++都没有提供二进制数的表达方法,所以,这里所学的八进制是我们学习的,CtC++语言的数值表达的第二种进制法。