2进10的换算进制Word格式文档下载.docx

上传人:b****3 文档编号:18391174 上传时间:2022-12-16 格式:DOCX 页数:15 大小:131.14KB
下载 相关 举报
2进10的换算进制Word格式文档下载.docx_第1页
第1页 / 共15页
2进10的换算进制Word格式文档下载.docx_第2页
第2页 / 共15页
2进10的换算进制Word格式文档下载.docx_第3页
第3页 / 共15页
2进10的换算进制Word格式文档下载.docx_第4页
第4页 / 共15页
2进10的换算进制Word格式文档下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

2进10的换算进制Word格式文档下载.docx

《2进10的换算进制Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《2进10的换算进制Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。

2进10的换算进制Word格式文档下载.docx

  那么:

十转二示意图

要转换的数是6,6÷

2,得到商是3,余数是0。

  “将商继续除以2,直到商为0……”

  现在商是3,还不是0,所以继续除以2。

  那就:

2,得到商是1,余数是1。

  “将商继续除以2,直到商为0……”

  现在商是1,还不是0,所以继续除以2。

2,得到商是0,余数是1

  “将商继续除以2,直到商为0……最后将所有余数倒序排列”

  好极!

现在商已经是0。

  我们三次计算依次得到余数分别是:

0、1、1,将所有余数倒序排列,那就是:

110了!

  6转换成二进制,结果是110。

  把上面的一段改成用表格来表示,则为:

  被除数计算过程商余数

  66/230

  33/211

  11/201

  (在计算机中,÷

用/来表示)

2.二---->

  二进制数转换为十进制数

  二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

  所以,设有一个二进制数:

01100100,转换为10进制为:

  下面是竖式:

  01100100换算成十进制

  "

^"

为次方

  第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+

  公式:

第N位2^(N)

  ---------------------------

  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^5+1*2^6=100

3.十---->

  10进制数转换成8进制的方法,和转换为2进制的方法类似,唯一变化:

除数由2变成8。

  来看一个例子,如何将十进制数120转换成八进制数。

  用表格表示:

  120120/8150

  1515/817

  11/801

  120转换为8进制,结果为:

170。

4.八---->

  八进制就是逢8进1。

  八进制数采用0~7这八数来表达一个数。

  八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

  所以,设有一个八进制数:

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

5.十---->

十六

  10进制数转换成16进制的方法,和转换为2进制的方法类似,唯一变化:

除数由2变成16。

  同样是120,转换成16进制则为:

  120120/1678

  77/1607

  120转换为16进制,结果为:

78。

6.十六---->

  16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这六个字母来分别表示10,11,12,13,14,15。

字母不区分大小写。

  十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……

  所以,在第N(N从0开始)位上,如果是是数X(X大于等于0,并且X小于等于15,即:

F)表示的大小为X*16的N次方。

  假设有一个十六进数2AF5,那么如何换算成10进制呢?

  用竖式计算:

  2AF5换算成10进制:

  第0位:

5*16^0=5

  第1位:

F*16^1=240

  第2位:

A*16^2=2560

  第3位:

2*16^3=8192+

  -------------------------------------

  10997

  直接计算就是:

  5*16^0+F*16^1+A*16^2+2*16^3=10997

  (别忘了,在上面的计算中,A表示10,而F表示15)

  现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。

  假设有人问你,十进数1234为什么是一千二百三十四?

你尽可以给他这么一个算式:

  1234=1*10^3+2*10^2+3*10^1+4*10^0

7.二---->

  (11001.101)

(二)

  整数部分:

从后往前每三位一组,缺位处用0填补,然后按十进制方法进行转化,则有:

  001=1

  011=3

  然后我们将结果按从下往上的顺序书写就是:

31,那么这个31就是二进制11001的八进制形式

  小数部分:

从前往后每三位一组,缺位处用0填补,然后按十进制方法进行转化,则有:

  101=5

  然后我们将结果部分按从上往下的顺序书写就是:

5,那么这个5就是二进制0.101的八进制形式

  小数部分

  所以:

(11001.101)

(二)=(31.5)(八)

8.八---->

  (31.5)(八)

从后往前每一位按十进制转化方式转化为三位二进制数,缺位处用0补充则有:

  1---->

1---->

001

  3---->

11

11001,那么这个11001就是八进制31的二进制形式

  说明,关于十进制的转化方式我这里就不再说了,上一篇文章我已经讲解了!

从前往后每一位按十进制转化方式转化为三位二进制数,缺位处用0补充则有:

  5---->

101

101,那么这个101就是八进制5的二进制形式

(31.5)(八)=(11001.101)

(二)

9.十六---->

  二进制和十六进制的互相转换比较重要。

不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

  我们也一样,只要学完这一小节,就能做到。

  首先我们来看一个二进制数:

1111,它是多少呢?

  你可能还要这样计算:

1*2^0+1*2^1+1*2^2+1*2^3=1*1+1*2+1*4+1*8=15。

  然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:

8、4、2、1。

即,最高位的权值为2^3=8,然后依次是2^2=4,2^1=2,2^0=1。

  记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。

  下面列出四位二进制数xxxx所有可能的值(中间略过部分)

  仅4位的2进制数快速计算方法十进制值十六进值

  1111=8+4+2+1=15F

  1110=8+4+2+0=14E

  1101=8+4+0+1=13D

  1100=8+4+0+0=12C

  1011=8+0+2+1=11B

  1010=8+0+2+0=10A

  1001=8+0+0+1=99

  ....

  0001=0+0+0+1=11

  0000=0+0+0+0=00

  二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。

  如(上行为二制数,下面为对应的十六进制):

  11111101,10100101,10011011

  FD,A5,9B

  反过来,当我们看到FD时,如何迅速将它转换为二进制数呢?

  先转换F:

  看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?

应该是8+4+2+1,所以四位全为1:

1111。

  接着转换D:

  看到D,知道它是13,13如何用8421凑呢?

应该是:

8+4+1,即:

1101。

  所以,FD转换为二进制数,为:

11111101

  由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。

  比如,十进制数1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。

所以我们可以先除以16,得到16进制数:

  12341234/16772

  7777/16413(D)

  44/1604

  结果16进制为:

0x4D2

  然后我们可直接写出0x4D2的二进制形式:

010011010010。

  其中对映关系为:

  0100--4

  1101--D

  0010--2

  同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。

  下面举例一个int类型的二进制数:

  01101101111001011010111100011011

  我们按四位一组转换为16进制:

6DE5AF1B

  再转换为10进制:

6*16^7+D*16^6+E*16^5+5*16^4+A*16^3+F*16^2+1*16^1+B*16^0=1,843,769,115

编辑本段二、负数

  负数的进制转换稍微有些不同。

  先把负数写为其补码形式(在此不议),然后再根据二进制转换其它进制的方法进行。

  例:

要求把-9转换为八进制形式。

则有:

  -9的补码为1111111111110111。

从后往前三位一划,不足三位的加0

  111---->

7

  110---->

6

  001---->

1

177767,那么177767就是十进制数-9的八进制形式。

  补充:

  最近有些朋友提了这样的问题“0.8的十六进制是多少?

  我想在我的空间里已经有了详细的讲解,为什么他还要问这样的问题那

  于是我就动手算了一下,发现0.8、0.6、0.2......一些数字在进制之间的转化

  过程中确实存在麻烦。

  就比如“0.8的十六进制”吧!

  无论你怎么乘以16,它的余数总也乘不尽,总是余0.8

  这可怎么办啊,我也没辙了

  第二天,我请教了我的老师才知道,原来这么简单啊!

  具体方法如下:

  0.8*16=12.8

  .

  取每一个结果的整数部分为12既十六进制的C

  如果题中要求精确到小数点后3位那结果就是0.CCC

  如果题中要求精确到小数点后4位那结果就是0.CCCC

  现在OK了,我想我的朋友再也不会因为进制的问题烦愁了!

  下面是将十进制数转换为负R进制的公式:

  N=(dmdm-1...d1d0)-R

  =dm*(-R)^m+dm-1*(-R)^m-1+...+d1*(-R)^1+d0*(-R)^0

  15=1*(-2)^4+0*(-2)^3+0*(-2)^2+1*(-2)^1+1*(-2)^0

  =10011(-2)

  其实转化成任意进制都是一样的

  初学者最容易犯的错误!

  犯错:

(-617)D=(-1151)O=(-269)H

  原因分析:

如果是正数的话,上面的思路是正确的,但是由于正数和负数在原码、反码、补码转换上的差别,所以按照正数的求解思路去对负数进行求解是不对的。

  正确的方法是:

首先将-617用补码表示出来,然后再转换成八进制和十六进制(补码)即可。

  注:

二进制补码要用16位。

  正确答案:

(-617)D=(176627)O=(fd97)H

  负数十进制转换成八进制或十六进制方法

  如(-12)10=( )8=( )16

  第一步:

转换成二进制

  1000000000001100

  第二步:

补码,取反加一 

  注意:

取反时符号位不变!

 

  1111111111110100

  第三步:

转换成八进制是三位一结合:

(177764)8

  转换成十六进制是四位一结合:

(fff4)16

编辑本段C程序代码:

(支持负进制)

  #include<

stdio.h>

math.h>

  main()

  {

  longn,m,r;

  while(scanf("

%ld%ld"

&

n,&

r)!

=EOF){

  if(abs(r)>

1&

&

!

(n<

0&

r>

0)){

  longresult[100];

  long*p=result;

  printf("

%ld="

n);

  if(n!

=0){

  while(n!

  m=n/r;

*p=n-m*r;

  if(*p<

r<

0){

  *p=*p+abs(r);

m++;

  }

  p++;

n=m;

  for(m=p-result-1;

m>

=0;

m--){

  if(result[m]>

9)

%c"

55+result[m]);

  else

%d"

result[m]);

  elseprintf("

0"

);

(base%d)\n"

r);

  }}

  return0;

  以下为10进制以下转换。

  用函数,可直接拷贝。

  (VS2008环境下C++控制台代码)

  #include"

stdafx.h"

  intx[100];

  intjzzh(inty,intml)

  inti,j;

  i=ml;

  x[0]=0;

  for(inta=1;

;

a++)

  if(i!

=0)

  x[a]=i%y;

  x[0]++;

  break;

  i=i/y;

  returnx[0];

  intmain(intargc,char*argv[])

  printf("

Hello,world\n"

  longinty,ml;

  longinta;

请输入需要转换至进制数:

"

  scanf("

y);

请输入数字:

ml);

  jzzh(y,ml);

  for(a=x[0];

a>

=1;

a--)

x[a]);

\n"

编辑本段Java代码

  Java代码实现十进制分别转换为十六,二,八进制。

Java代码

核心思想就是余数定理。

  publicclassChange{

  /*转为16进制*/

  staticvoidcha_16(intn){

  if(n>

=16)cha_16(n/16);

  if(n%16<

10)System.out.print(n%16);

  elseSystem.out.print((char)(n%16+55));

  /*转为2进制*/

  staticvoidcha_2(intn){

=2)cha_2(n/2);

  System.out.print(n%2);

  /*转为8进制*/

  staticvoidcha_8(intn){

  if(n>

=8){

  cha_8(n/8);

  System.out.print(n%8);

}

  elseSystem.out.print(n);

  /*主程序入口*/

输出结果

publicstaticvoidmain(String[]args){

  inta=27,b=9,c=19;

/*定义输入的转换数值*/

  System.out.print("

十进制数"

+a+"

=>

十六进制输出:

  cha_16(a);

  System.out.println();

/*换行*/

+b+"

二进制输出:

  cha_2(b);

+c+"

八进制输出:

  cha_8(c);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1