zoukankan      html  css  js  c++  java
  • 大话二进制,八进制,十进制,十六进制之间的转换

    1.前言

           每次放假最无聊的事情,就是不想起床,不想吃饭,方正就是不想动,躺在床上,看着手机,无聊的刷着QQ空间,虽然现在已经很少人玩QQ空间,可是这种习惯一直保持到现在,都没有改变过,电脑上的QQ突然闪动着,我知道是丁大叔发来的QQ消息,叫我一起去吃重庆老麻抄手,丁大叔之所以叫大叔,是因为一起上学的时候,被我们班上的女生调戏了一下,所以我时常拿这个调侃他,不过他也从来都不在乎。

           我是湖北人,丁大叔是四川人,我俩的口味都一样,吃东西都要多少带点辣的,在这个变态的广州,他们都不吃辣椒的,要么就是超级辣的那种,真叫人受不了。

           在我心里我一直很佩服丁大叔的,他湖南大学的高材生,日语专业,日语一级,英语六级,更让我佩服的是他大学的时候,他们班上就3个男生,其他都是女孩子,他万花丛中过片叶不沾身,硬着没找个女朋友,我佩服的全身着地,他最大的志向就是去岛国,毕竟人家日语一级嘛,要是不去心里上也过不去。

           还是和往常一样,吃着抄手,讨论着我们最近都在公司做什么项目,一次无意的谈话,他问我知道什么是二进制么,我说知道,他接着问,你知道怎么用吗,我说不知道,难道不会用二进制,还不能写代码了么?说了这么多毕竟丁大叔,还是那么牛逼,只怪自己学而不精嘛,于是有了这篇文章。

          二进制一个熟悉又很陌生的东西,貌似现在的应用程序员用的真的很少,现在都用高级语言来开发程序,谁还用到二进制,八进制,十六进制,给我的感觉那就是这些都是那些c,c++写一些底层交互的程序员干的事,向c,c++大神致敬,今天班门弄斧了,既然感到陌生,那我们就来研究下这个东西,纯属个人兴趣爱好而已。

    2.什么是二进制

         二进制是计算技术中广泛采用的一种数制二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

    信息的存储单位

    位(Bit) :度量数据的最小单位

    字节(Byte):最常用的基本单位,一个字节有8位

    b7  b6 b5 b4 b3 b2 b1 b0

    1    0   0  1   0   1   0   1  =27+24+22+20=149

    K字节       1k=1024 byte

    M(兆)字节  1M=1024K

    G(吉)字节  1G=1024M

    T(太)字节  1T=1024G

    曾经听人说,一个c,c++大神,就靠输入,0和1就可以装好操作系统,不知道是不是真的,嘿嘿

    3.十进制转换

    1234[10进制] 0 1 2 3 4 5 6 7 8 9 0 当数位上的值超过9就要进1

    1000+200+30+4=1*103+2*102+3*101+4*100=1234

    1011[2进制] 0 1 当数位上的值超过1就要进1

    1*23+0*22+1*21+1*20=8+0+2+1=11

    1011[8进制]0 1 2 3 4 5 6 7 当数位上的值超过7就要进1

    1*83+1*81+1*80=512+8+1=521

    1011[16进制]0 1 2 3 4 5 6 7 8 9 A B C D E F 当数位上的值超过15就要进1

    1*163+1*161+1*160=4096+16+1=4113

     当然其他进制转换成10进制是最简单的了,我想聪明的你肯定会了。

    4.二进制转换

     首先来看十进制到二进制:除2取余数 最后把余数倒过来 100101

    比如:十进制数37

     所以转换成的二进制数字为:100101

     再来八进制到二进制:一个八进制的位拆分成一个三位的二进制数

    比如:[八进制]616

          6拆分成 110

         1拆分成 001

         6拆分成 110

    所以转换成的二进制数字为:110001110

     再来十六进制到二进制:一个八进制的位拆分成一个四位的二进制数

     比如:[十六进制]616

          6拆分成 0110

         1拆分成 0001

         6拆分成 0110

    所以转换成的二进制数字为:11000010110

    5.八进制转换

    十进制到八进制:除8取余数 最后把余数倒过来

    同时我们也可以先将十进制转换成二进制,然后将二进制又转换成八进制 

    比如:2456 转化成八进制数字:4630

    2456/8=307,余0;
    307/8=38,余3;
    38/8=4,余6;
    4/8=0,余4。
    将所有余数倒序相连,得到结果:4630。
    因此十进制的2456转换为八进制结果为4630。

    二进制到八进制转换  7=4+2+1 111 八进制最大的数字是7转换成二进制刚好是111,占3个位

    每三个二进制数为一组,转成一个八进制数位,如果二进制高位不足3位时,用零填补。

    比如:10011011

          010 011 011

           2     3     3

    因此二进制的10011011转换为八进制结果为233。

     十六进制到八进制

     我们可以先把十六进制的数字转换成二进制,在从二进制转换成八进制例如: 

    3BC24
    分别对应到二进制就是:
    3 0011
    B 1011
    C 1100
    4 0100

    连起来就是:
    0011 1011 1100 0100

    再按照每三个一组分组:
    0 011 101 111 000 100

    0__3__5__7__0__4
    所以8进制就是35704

    6.十六进制转换

    十进制到十六进制:除16倒着取余数

    同时我们也可以先将十进制转换成二进制,然后将二进制又转换成十六进制 

    比如说:1610转换成十六进制

    直接转16进制:
    1610/16=100……10(A);
    100 /16= 6……4;
    6 /16= 0……6;

    故:1610(10)=64A(16).

    
    

    二进制到十六进制 15=8+4+2+1   1111 十六进制最大数字是F,即15转换成二进制1111,刚好占4个位

    每四个二进制数为一组,转成一个十六进制数位,如果二进制高位不足3位时,用零填补。

    比如:1110011011

            0011 1001 1011

              3       9      B

    因此二进制的 1110011011转换为十六进制39B

    八进制到十六进制

    我们可以先把八进制的数字转换成二进制,在从二进制转换成十六进制

       八进制的:1234567

    转换为二进制是每个数字转换为三位二进制:001 010 011 100 101 110 111

    然后把这些数字从右边开始进行按四位分组:0 0101 0011 1001 0111 0111

    然后从右边每四位组依次对应一个16进制数:053977

    7.各种进制的用途

    说了这么多,这些进制都有些什么用了,大家一起讨论下吧!!!

    10进制,当然是便于我们人类来使用,我们从小的习惯就是使用十进制,这个毋庸置疑。

    2进制,是供计算机使用的,1,0代表开和关,有和无,机器只认识2进制。

    16进制,内存地址空间是用16进制的数据表示, 如0x8049324。

    编程中,我们常用的还是10进制。   

    比如:int a = 100,b = 99;   

    不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决 问题。但二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:   

    0000 0000 0000 0000 0110 0100   

    面对这么长的数进行思考或操作,没有人会喜欢。因此,用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。

    1.用于计算机领域的一种重要的数制   

    2.对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,既要考虑功能的完备,还要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。   

    3.十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数。

    8进制,一般有什么用,查了下资料,还真不知道?有知道的大神告诉我吧。

    如果你用过linux你可能见过这样表示一个文件的权限:0777、0666等等
    可能有的这样解释:具有读权限加1,具有写权限加2,具有执行权限加4,最后的和就是一个角色所具有的权限。而linux有三种角色:属主、属组、其他用户,所以用0777、0666之类的表示。
    如果用二进制来看的话,linux用3个bit来表示权限,如果具有某个权限就把那位置1.比如只具有读权限就是100,只具有写权限就是010,具有读写权限就是110,具有读写执行权限就是111。

     8.结束

    对于一个应用程序员,了解这些还是有一些好处的,我们现在开发都是一些高级语言,C#,Java,内存分配,垃圾的回收,都不用我们自己操心,这样我们会有更多的时间去关注一些业务逻辑的处理。本人水平有限,文中如有什么不妥,欢迎拍砖,大神就别看了,我写此文章只是自己学习过程中的一个总结,如果你觉得本文不错,帮我点个赞!!!

     

  • 相关阅读:
    2015.2.27 UltraEdit中显示XML结构
    2015.1.31 DataGridView自动滚动到某行
    2015.1.15 利用函数实现将一行记录拆分成多行记录 (多年想要的效果)
    2015.1.15 利用Oracle函数返回表结果 重大技术进步!
    2015.1.15 利用Oracle函数插入表结构 Bulk collect into 不用循环,简洁高效
    2015.1.8 Left join 左连接
    2015.1.10 解决DataGridView SelectionChanged事件自动触发问题
    delphi 遍历窗口
    delphi 访问 protected 属性 哈哈
    clientdataset 读取excel 如果excel 文件不存在的时候 相应的gird 会不显示数据, 鼠标掠过 gird 格子 才会显示数据。 这是一个bug 哈哈
  • 原文地址:https://www.cnblogs.com/fenglingyi/p/4750378.html
Copyright © 2011-2022 走看看