最近看数据结构的书,回顾下以前学的东西。无意间翻到了stack这章,我就在想,为什么要使用栈这种数据结构?它的底层不也就是数组或者链表来实现的吗?于是,希望能从书中找到答案(其实我之前也猜想,无非是和pattern类似,封装了一层,便于使用嘛)。书里讲了几个例子来说明stack的用法。其中一个就是"数制转化",一个古老的话题,学计算机的都会知道。结尾处作者如是说,摘抄如下:栈的引入简化了程序设计的问题,划分了不同的关注层次,使思考范围缩小了,而用数组不仅掩盖了问题的本质,还要分散精力去考虑数组下标增减等细节问题!

ok,扯远了点。只是想记录下,方便以后查阅。进入正题!如何才能够快速地进行进制的转化(当然是针对人的思维来说)?参考了两篇篇文章(http://blog.163.com/zh_jie/blog/static/164715022201093010755919/和http://shakesmin.javaeye.com/blog/57978),自己也思考了下,暂总结如下:

进制主要分为10进制、2进制、8进制、16进制。为什么会有不同的进制?10进制便于人类计数,但是计算机却很难识别。而计算机则很容易识别2进制并进行计算。这两种极端情况下又出现了8进制和16进制,why?因为有的时候人像看清计算机计算的东西(2进制表示),但是2进制有个缺点,就是数字大了后会变得很长,很难理解!所以人们就选取了折中的方式,8进制和16进制。

小结:由此可以看出,10进制转2、8、16进制相对而言要难些,而2、8、16进制之间相互转化则要容易些~

先从容易的开始。2、8、16进制之间相互转化。(借用上面引用的两则文章可知,1111这个2进制数的每位权值分别是8、4、2、1,这个很有用!)

2 to 8:以10010为例,要转成8进制,则从右向左看,每3个为一组,不足的补零,变成010 010,加上权值后为22,即为8进制数!

8 to 2:与上面的相反,以27为例,要转为2进制,则每个位作为一组分开,变成2 7,通过权值变换后为010 111(为1的替换为权值,然后相加等于7,则4+2+1,即每个位都是1,故为111),最后得到的2进制数为010111,去掉左边的0,最终结果是10111。

2 to 16: 以101110为例,要转成16进制,类似,从右向左看,每4个为一组,不足的补零,变成0010 1110,加上权值后为2E,有个规律,8进制的各个位<=7,16进制的各个位<=15,也就是说16进制中的数可以是1、2、3、4……9、A、B、C、D、E、F。

16 to 2:以EF为例,每个为作为一组分开,变成E F,通过权值变换后为1110 1111,最后得到的2进制是 11101111

8 to 16:以27为例,8进制和16进制之间的转换需要用2进制来作为过渡,先转成2进制为010 111,然后从右向左数,将现在的3个一组变为4个一组,不足的补零,变为0001 0111,然后权值变换后为1 7,也就是16进制数 17

16 to 8:类似,只是反过来就不再赘述了~

以上就是2、8、16进制之间的转换,很简单。下面介绍10进制向2、8、16进制的转换。

同上面那样,为了快速计算,我们需要了解一些比较常用的式子。如下所示:

21=2 ; 22=4 ; 23=8 ; 24=16 ; 25=32 ; 26=64 ; 27=128 ; 28=256

10 to 2:以52为例,52-32-16-4 = 0,也就是说52可以分解为4+16+32,而32对应的是25,因而最高位是第6位为1,即32是100000(或者说后面跟5个0)。这样52可以分解为100000+10000+100=110100(2)

通过这种方式转为2进制之后就很容易再转为8、16进制。

另外一种做法是 取余法。如下所示(图片来自网络,版权属于原作者!)

这种做法适合于编程实现10进制与2、8、16进制的转化。

计算机中各种数制间的转化(10进制与2、8、16进制之间的快速转化)相关推荐

  1. 微型计算机基础理论——计算机中的数制及其应用

    微型计算机基础概论 一.前言 二.微型计算机系统 计算机的发展历程 1.电子管计算机时代(1946~1956年) 2.晶体管计算机时代(1957~1964年) 3.中小规模集成电路计算机时代 (196 ...

  2. 计算机中的数制与编码教程,第一章计算机中的数据和编码教程.doc

    第一章计算机中的数据和编码教程 第一章 计算机中的数据和编码 1.1计算机中的数制 1.2计算机中数的表示 1.3计算机中的编码 1.1 计算机中的数制之进位计数制 进位制: 按照进位的方法进行计数的 ...

  3. 计算机数制表示方法,计算机中的数制表示

    <计算机中的数制表示>由会员分享,可在线阅读,更多相关<计算机中的数制表示(42页珍藏版)>请在人人文库网上搜索. 1.补充的主要内容,数制的基本概念 计算机中的数制 数制间的 ...

  4. 计算机中的数制教学课程,计算机中的数制和码制教案.doc

    教案设计 姓名:包婷婷 学号:20090512124 班级:2009级 学院:计算机与信息科学 专业:计算机科学与技术(师范) 日期:2011年12月26日 科目:微型计算机基础 课名:计算机中的数制 ...

  5. 计算机和学数制和码制,[文学]第二章 计算机中的数制和码制.ppt

    [文学]第二章 计算机中的数制和码制 注意:十六进制计数法是为了克服二进制计数法书写麻烦而引入的一种进位计数制:在编写汇编语言源程序时,如果一个十六进制数的最高位为A?F中的一个数字符号时,该数前面必 ...

  6. 计算机数的表示数制转换视频,第一讲计算机中的数制及其转换.ppt

    <第一讲计算机中的数制及其转换.ppt>由会员分享,可在线阅读,更多相关<第一讲计算机中的数制及其转换.ppt(19页珍藏版)>请在人人文库网上搜索. 1.第二讲 计算机常用的 ...

  7. 计算机中的数制转换ppt,计算机中的数制转换.ppt

    计算机中的数制转换 计算机基础知识之一;主要内容及要求;1.计算机中的常用数制;不同进制数的对应关系:;2.常用数制之间的转换;3.非十进制数之间的转换 (1)二进制数与八进制数的转换 方法是:以小数 ...

  8. ASCII表完整版(包含16进制对应表)——看看16进制与10进制的转化

    ASCII码表完整版 ASCII值 16进制 控制字符 ASCII值 16进制 控制字符 0 00H NUT 32 20H (space) 1 01H SOH 33 21H ! 2 02H STX 3 ...

  9. 10进制整型转16进制整型?

    探究10进制整型转16进制整型 1).16进制字符串与整型的互换: String str="1A";         int t=Integer.parseInt(str, 16) ...

最新文章

  1. 数据分析奥斯卡女神们,谁是你心中的No.1?
  2. C#中的委托和事件 (7)---总结
  3. 软考-信息系统项目管理师-知识管理
  4. mathematica在linux上运行,Mathematicamatlab的linux版的安装
  5. 正则不以什么开头_python基础 | 正则扫盲
  6. 测试负责人和测试工程师在日常工作有什么不同
  7. 话说模式匹配(1) 什么是模式?
  8. 收音机磁棒天线4根接法_五六十年代不需要电的收音机,你见过吗?
  9. 2020年最全Python常用爬虫代码就这些了(附爬虫教程)
  10. win10自动停用打印服务器,技术员详解win10系统添加打印机总是自动关闭打印服务的技巧...
  11. bzoj1005 [HNOI2008]明明的烦恼(Prufer数列+高精度(wys算法。。。))
  12. Matlab 最小二乘法
  13. vue中全局定义mintUI中toast
  14. 专家热议网络安全 我国建设网络强国要以自主可信为先
  15. android 巧妙利用反射机制获取控件id,避免大量冗杂的findviewbyid和butterknife注解
  16. java 最大递减数_算法--求先递增后递减数组最大值的下标
  17. win10重建图标缓存bat
  18. Navicat管理数据库常用快捷键
  19. 粉红猪小妹peppa pig中英文版209集+218本绘本+音频
  20. 社交分享(facebook分享、twitter分享、link分享、google分享)

热门文章

  1. Swagger2的上传文件
  2. JAVA中MAP的四种类型区别和常见的简单用法
  3. 视频教程-AI商业插画入门基础教学-Illustrator
  4. 华为手机承载系统在哪里_说好的取代安卓呢?华为鸿蒙为啥不是手机操作系统了...
  5. 织梦dede标签tags的美化教程
  6. 刷脸支付不拿手机也能付款高大上
  7. oracle显示员工的名字和姓氏,如何在sql中以a和b开头显示员工姓名
  8. 利用电脑QQ自带的文字识别工具,识别文字和翻译英文(小技巧,节省打字时间)
  9. c#输入三个数选出最大的_c# 如何获取三个数字中最大值呢?
  10. freemarker导出word模板