zoukankan      html  css  js  c++  java
  • 进制的转换

    package conversationofnumbersystems;
    
    public class Test1 {
        public static void main(String[] args){
            /**
          * 计算机刚开始都是二进制,0101的形式,但是由于二进制表示大数据太长了,所以就产生了8进制和16进制用来存储大数据。
          * 8进制是将二进制的3个位作为一段,使用其十进制的值表示
          * 16进制是将二进制的4个位作为一段,使用十进制的值表示,不过10~15使用ABCDEF表示,a~f支持大小写


    * 数制是用一组固定的符号和统一的规则来表示数值的方法 * 计算机底层使用的数制是二进制 * java编写程序使用的是十进制,但是java底层使用的仍然是二进制 * 常用的进制还包括8进制和16进制 * * 十进制的基本数字是0~9,逢10进位 * 10被称为基数,10的n次幂被称为权 * 10000=1*10^4(注意:这里我的^是表示指数的,在数学里是这样表示的,但是在计算机语言中^表示的不是指数,是一种位运算符,将两个数转换成2进制,不同则为1) * 1000=1*10^3 * 23678=2*10^4+3*10^3+6*10^2+7*10^1+8*10^0 * * 二进制的基本数字是0 1,逢2进位 * 二进制的基数为2,权为2的n次方
         * 在Java中使用0b作为前缀 * 1=1*2^0 * 10=1*2^1+0*2^0 * 100=1*2^2+0*2^1+0*2^0 * 1111(二进制)=1*2^3+1*2^2+1*2^1+1*2^0=15 或者1111+1=10000-1=2^5-1=15 * * 十六进制 * 基本数字: 0 1 2 3 4 5 6 7 8 9 A B C D E F (字母可以是大写表示也可以小写表示) * 基数为16,权为16的n次方 * 十六进制实际上是二进制的简写,方便专业人员书写二进制数据,因为二进制表示大数据过长 * 在java中十六进制用0X或者0x作为前缀 * 1=1*16^0 * 10=1*16^1+0*16^0 * 5e=5*16^1+14*16^0=5*16+14*10=94 * * 十六进制转化为十进制 * 0x12 =1*16^1+2*16^0=18 * 十六进制转换为二进制 * 0x12=00010010 * 方式:因为16是2的4次方,所以可以将16进制的每一位转换成为4位的二进制然后联合起来,十六进制和二进制每一位的连接使用的是加法而不是乘法 * * 照这个逻辑,8进制是2的3次方,所以八进制转换成为2进制就是将每一位8进制的数转换成3位的2进制数,联合起来。 * 012=001010 * 十六进制和8进制的转换可以通过2进制作为媒介达到效果。 * 二进制转换成为16进制和2进制转换成为8进制也是类似的原理 * * 将10进制转换成为2进制、8进制、16进制 * 转为2进制,10一直除2,知道商为0,将余数倒叙联合就是了 * 除数 被除数 商 余数 * 2 10 5 0 * 2 5 2 1 * 2 2 1 0 * 2 1 0 1 * 得到:1010=2^3+2^1=10 * 8 56 7 0 * 8 7 0 7 * 得到070=7*8^1+0*8^0=56 * 16 466 29 2 * 16 29 1 13 * 16 1 0 1 * 得到0x1D2 *
    */ int x=0x1D2; System.out.println(x); /*System.out.println(Integer.toBinaryString(18)); System.out.println(Integer.toOctalString(18));*/ } }

    8421码将2进制转换成为10进制:
    8421码的原理是将一些常用的二进制的位值代表的十进制列出来,查找替换进行十进制和二进制的转换。

    1  1  1  1  1  1  1  1
    128 64 32 16 8 4 2  0

    二进制转10进制:
    0b10010=2+16=18
    十进制转2进制:
    18=16+2=0b10010
    178=128+32+16+2=0b10110010

    浮点型的进制转换:
    浮点型的存储结构和整形的不一样
    浮点型的存储范围大于long型。
    不是太明白,不想深究了。

    float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准:
        一个浮点数有2部分组成:底数m和指数e

    底数部分 使用二进制数来表示此浮点数的实际值
    指数部分 占用8bit的二进制数,可表示数值范围为0-255

    但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。
        所以,float类型的指数可从-126到128

    底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit
        科学计数法。

    格式:
    SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
    S表示浮点数正负    
    E指数加上127后的值得二进制数据
    M底数

    举例:
    17.625在内存中的存储

    首先要把17.625换算成二进制:10001.101

        整数部分,除以2,直到商为0,余数反转。
    整数部分:17=10001
        小数部分,乘以2,直到乘位0,进位顺序取。
    小数部分:
      0.625*2=1 .25
      0.25*2=0 .5
      0.5*2=1  .0
      0*2=0  .0
    ......
    得到:1010...

    在将10001.101右移,直到小数点前只剩1位:
        1.0001101 * 2^4 因为右移动了四位

    这个时候,我们的底数和指数就出来了
    底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101
    指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011
    符号部分是整数,所以是0
    综上所述,17.625在内存中的存储格式是:
    01000001 10001101 00000000 00000000    

    换算回去:自己做。



  • 相关阅读:
    flex>导航
    flex>图表控件
    Struts2>Cannot find the tag library descriptor for /strutstags
    jsp>Smartupload例子代码
    flex>MXML语法
    解决JBoss只能通过localhost(127.0.0.1)而不能通过IP访问
    jsp>tomcat配置虚拟目录
    JSF>概述
    Struts2>中文乱码
    flex>HttpService
  • 原文地址:https://www.cnblogs.com/aigeileshei/p/5505979.html
Copyright © 2011-2022 走看看