精华内容
下载资源
问答
  • 文章目录简介进制的基本概念二进制、八进制、十六进制加减法的区别二进制八进制十六进制数制之间的转换情景一、将二进制、八进制、十六进制转换为十进制(总结:按权相加)整数部分(不带小数)整数部分+小数部分...

    简介

    目前计算机虽然能够快速运算,但它内部使用的数据并不像人类所熟悉的十进制数,而是使用只含0、1组成的二进制数。我们输入到计算机的十进制数需要被转换成二进制数后再进行计算,计算后的结果又由二进制转换成我们需要的进制数,这些都是由操作系统自动完成,数制是用一组固定的符号和统一的规则来表示数值的方法,人们通常采用的数制有十进制,二进制,八进制和十六进制。

    进制的基本概念

    二进制,八进制,十进制,十六进制之间的区别在于:

    • 数码(各个位上的数字)表示的范围不同,二进制的数码有0和1,十六进制的数码有0~9,A~F
    • 基数(所能够使用数码的个数)不同,二进制的基数为2,十六进制的基数为16
    • 位权(i位上的位权为基数的(i-1)次幂,从左至右分别为第1位,第2位…),如十进制数123中的1所在位的位权是10^2,2所在位的位权是10^1,3所在位的位权是10^0;二进制数1101中,最左边的1位权是2^3

    二进制、八进制、十六进制加减法的区别

    二进制

    二进制加减法和十进制加减法的思想是类似的:对于二进制,进行加法运算时逢二进一,进行减法运算时借一当二。

    • 二进制加法:1+0=1、1+1=10、11+10=101、111+111=1110
      在这里插入图片描述
    • 二进制减法:1-0=1、10-1=1、101-11=10、1100-111=101
      在这里插入图片描述

    八进制

    八进制有 0~7 共8个数字,基数为8,加法运算时逢八进一,减法运算时借一当八。例如,数字 0、1、5、7、14、733、67001、25430 都是有效的八进制。

    • 八进制加法:3+4=7、5+6=13、75+42=137、2427+567=3216

    在这里插入图片描述

    • 八进制减法:6-4=2、52-27=23、307-141=146、7430-1451=5757
      在这里插入图片描述

    十六进制

    十六进制中,用A来表示10,B表示11,C表示12,D表示13,E表示14,F表示15,因此有 0~F 共16个数字,基数为16,加法运算时逢16进1,减法运算时借1当16。例如,数字 0、1、6、9、A、D、F、419、EA32、80A3、BC00 都是有效的十六进制。

    • 十六进制加法:6+7=D、18+BA=D2、595+792=D27、2F87+F8A=3F11

    在这里插入图片描述

    • 十六进制减法:D-3=A、52-2F=23、E07-141=CC6、7CA0-1CB1=5FEF

    在这里插入图片描述

    数制之间的转换

    情景一、将二进制、八进制、十六进制转换为十进制(总结:按权相加)

    二进制、八进制和十六进制向十进制转换都非常容易,就是“按权(位权)相加”。不清楚位权的同学可以往上看。
    假设当前数字是 N 进制,那么:

    • 对于整数部分,从右往左看,第 i 位的位权等于Ni-1
    • 对于小数部分,恰好相反,要从左往右看,第 j 位的位权为N-j

    整数部分(不带小数)

    将二进制数字11010转换成十进制:

    11010 = 1×2^4 + 1×2^3 + 0×2^2 + 1×2^1 + 0×2^0 = 26(十进制)
    

    八进制数字 53627 转换成十进制:

    53627 = 5×8^4 + 3×8^3 + 6×8^2 + 2×8^1 + 7×8^0 = 22423(十进制)
    

    十六进制数字 9FA8C 转换成十进制(将A~F对应的具体的数字计算):

    9FA8C = 9×16^4 + 15×16^3 + 10×16^2 + 8×16^1 + 12×16^0 = 653964(十进制)
    

    整数部分+小数部分

    二进制数字1010.1101 转换成十进制:

    1010.1101 = 1×2^3 + 0×2^2 + 1×2^1 + 0×2^0 + 1×2^-1 + 1×2^-2 + 0×2^-3 + 1×2^-4 = 10.8125(十进制)
    

    八进制数字 423.5176 转换成十进制:

    423.5176 = 4×82 + 2×81 + 3×80 + 5×8-1 + 1×8-2 + 7×8-3 + 6×8-4 = 275.65576171875(十进制)
    

    小数部分和整数部分相反,要从左往右看,第1位的位权为 8-1=1/8,第2位的位权为 8-2=1/64,第3位的位权为 8-3=1/512,第4位的位权为 8-4=1/4096 …… 第m位的位权就为 8-m。

    C语言实现代码(仅讨论整数):

    /*
    将一个2,8进制转换为十进制 (算法思维从高位到低位运算,暂时没考虑16进制) 
    */
    #include <stdio.h>
    #include <string.h>//strlen()
    int OcToDec(char *a,int base);//将2,8进制数a转换为十进制数 
    int main(void)
    {
     char a[20];//a存放八进制整数
     int tennum;//存放a对应的十进制整数
     printf("请输入一个数:") ;
     scanf("%s",a);//输入的时候,a[20]={1,0,1}  
     int n;
     printf("请输入该数的基数(输入的是几进制基数就是几):");
     scanf("%d",&n);
     tennum=OcToDec(a,n);
     printf("%d进制数%s转换为十进制为:%d\n",n,a,tennum);
     return 0;
    }
    int OcToDec(char *a,int base)
    {
     int sum=0;//变量sum存放a对应的十进制数 
     int len=strlen(a);//位数 
     int weight=1;//位权值
     for(int i=len-1;i>=0;i--)//将八进制从低位向高位输出, 即数组a下标最大的元素为八进制的最低位 
     {
      sum+=(a[i]-'0')*weight;//数组下标i越小,即八进制位数越高,位权weight越重 ,a[i]-'0'转化为Ascii码运算到到一个字符数字对应的整型数字 
      weight*=base; 
     } 
     return sum;
    }

    测试输出:
    在这里插入图片描述
    在这里插入图片描述
    扩展:以下代码块将int OcToDec(char *a,int base)函数体修改一下,让其从二进制或八进制高位向低位扫描各位上的数,按权相加求和。其中base为基数2或8

    int OcToDec(char *a, int base)   //将base(8)进制数a转换成十进制数 
    {
     int sum = 0;              
        int len = strlen(a);    
                
     for(int i = 0;i < len;i++)
     {  
         sum = sum * base + a[i] - '0';      
     }
     return sum;
    }
    

    情景二、将十进制转换为二进制、八进制、十六进制(总结:整数部分为除 N 取余,逆序排列,小数部分为乘 N 取整,顺序排列N为要转换对应进制的基数

    将十进制转换为其它进制时比较复杂,整数部分和小数部分的算法不一样。如果一个数字既包含了整数部分又包含了小数部分,那么将整数部分和小数部分开,分别按照上面的方法完成转换,然后再合并在一起即可。

    整数部分(不带小数)

    具体做法:

    • 将 N (要转化的目标进制的基数) 作为除数,用十进制整数除以 N,可以得到一个商和余数;
    • 保留余数,用商继续除以 N,又得到一个新的商和余数;
    • 仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
    • 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。

    将十进制数字 36926 转换成八进制:
    在这里插入图片描述
    结果为110076(八进制)。

    将十进制数字 42 转换成二进制的过程:
    在这里插入图片描述

    结果为101010(二进制)

    整数部分+小数部分

    具体做法:

    • 用 N(要转化的目标进制的基数) 乘以十进制小数,可以得到一个积,这个积包含了整数部分和小数部分;
    • 将积的整数部分取出,再用 N 乘以余下的小数部分,又得到一个新的积;
    • 再将积的整数部分取出,继续用 N 乘以余下的小数部分;
    • 如此反复进行,每次都取出整数部分,用 N 接着乘以小数部分,直到积中的小数部分为 0,或者达到所要求的精度为止。

    十进制小数 0.930908203125 转换成八进制小数的过程:
    在这里插入图片描述
    十进制小数 0.930908203125 转换成八进制小数的结果为 0.7345。

    十进制小数 0.6875 转换成二进制小数的过程:
    在这里插入图片描述
    十进制小数 0.6875 转换成二进制小数的结果为 0.1011。

    C语言实现代码(仅讨论整数):

    /*
    将十进制转换为2,8,16进制 
    */
    #include <stdio.h>
    #include <string.h>
    void DToM(int d,int m,char *mnum);//D->decimalism 
    int main(void)
    {
     int d;//存放输入的十进制数
     printf("请输入一个待转换的十进制数:"); 
     scanf("%d",&d);
     int M;
     printf("请输入要转换的进制(2,8,16):");
     scanf("%d",&M);
     char Mnum[100];//存放十进制数d对应的M进制数
     DToM(d,M,Mnum);
     printf("该十进制数对应的%d进制数为:%s\n",M,Mnum); 
     return 0;
    }
    void DToM(int d,int m,char *mnum)//d为十进制数,m为要转换的目标进制数,mnum指向的数组存放转换结果 
    {
     int len=0,r=0;//存放mnum指向数组的下标以及余数 
     do
     {//除M取余 
      r=d%m;
      if(r >= 10) //针对要转换为16进制的情况 
             mnum[len++] = r - 10 + 'A';   //将对应的整数转换成字母字符
         else      
             mnum[len++] = r + '0';     //将对应的整数转换成数字字符
      d/=m;
     }while(d!=0);
     mnum[len]='\0';
     char t;
     for(int i=0,j=len-1;i<j;i++,j--)//逆置输出 
     {
      t=mnum[i];
      mnum[i]=mnum[j];
      mnum[j]=t;
     }
    }

    测试输出:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    情景三、二进制和八进制、十六进制的转换(总结:通常二进制的3位分别用八进制的3位和十六进制的4位来表示)

    首先可以使用上面的方法

    • 将二进制转换为十进制(对应上文讲到的情景一),然后十进制转换为对应的的八进制和十六进制(对应上文讲到的情景二)
    • 亦或者将八进制和十六进制转换为十进制(情景一),然后十进制转化为二进制(情景二)

    C语言实现代码(将情景一和情景二的代码整合一下,即借助十进制数作为中介):

    /*
    N进制到M进制 
    */ 
    #include <stdio.h>
    #include <string.h>
    int NToD(char *a,int base);//将N进制数a转换为十进制数 (N可以考虑二、八、十六进制)
    void DToM(int d,int m,char *mnum);//再将十进制转换成M进制(M可以考虑二,八,十六进制)
    int getIndexOfSigns(char *ch);//NtoD函数内调用
    int main(void)
    {
     int N,M;//要将N进制数转换成M进制数 
     char Nnum[20],Mnum[20];//存放N进制数以及转换后的M进制数
     printf("要将N进制数Nnum转换成M进制数请输入以下格式\nN Nnum M:"); 
     scanf("%d %s %d",&N,Nnum,&M);
     int d=NToD(Nnum,N);//将N进制数Nnum转换成十进制数d
     DToM(d,M,Mnum);//将十进制数d转换成M进制数Mnum
     printf("%d进制数%s转换成%d进制数为:%s\n",N,Nnum,M,Mnum); 
     return 0; 
    }
    int NToD(char *a,int base)
    {
     int sum=0;//变量sum存放a对应的十进制数 
     int len=strlen(a);//位数 
     int weight=1;//位权值
     for(int i=len-1;i>=0;i--)//将N进制从低位向高位输出, 即数组a下标最大的元素为八进制的最低位 
     {
      sum+=(getIndexOfSigns(a[i]))*weight;//数组下标i越小,即八进制位数越高,位权weight越重 ,a[i]-'0'将字母映射为十进制数 
      weight*=base; 
     } 
     return sum;
    }
    void DToM(int d,int m,char *mnum)
    {
     int len=0,r=0;//存放mnum指向数组的下标以及余数 
     do
     {//除M取余 
      r=d%m;
      if(r >= 10) //针对要转换为16进制的情况 
             mnum[len++] = r - 10 + 'A';   //将对应的整数转换成字母字符
         else      
             mnum[len++] = r + '0';     //将对应的整数转换成数字字符
      d/=m;
     }while(d!=0);
     mnum[len]='\0';
     char t;
     for(int i=0,j=len-1;i<j;i++,j--)//逆置输出 
     {
      t=mnum[i];
      mnum[i]=mnum[j];
      mnum[j]=t;
     }
    }
    int getIndexOfSigns(char *ch)
    {
        if(ch >= '0' && ch <= '9')
        {
            return ch - '0';
        }
        if(ch >= 'A' && ch <='F') 
        {
            return ch - 'A' + 10;
        }
        if(ch >= 'a' && ch <= 'f')
        {
            return ch - 'a' + 10;
        }
        return -1;
    }

    情况三代码是对情况一和情况二的综合,将情况一的int OcToDec()改了一下见名知意的名字int NToD(),内部代码块没改,然后直接使用情况二的void DToM(),然后多加了一个int getIndexOfSigns(char *ch)增加了情况一对16进制的支持。

    测试输出结果(其中对情况一中的函数进行了改进,支持16进制转换为10进制):
    在这里插入图片描述
    在这里插入图片描述

    这里采用一种简便的办法:

    二进制整数和八进制整数之间的转换

    二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字(由于3位的二进制数最大只能是7,而八进制的数码正是0~7,3位二进制位按权相加得到一个十进制数),运算的顺序是从低位向高位依次进行,高位不足三位用零补齐,最后拼接起来。

    二进制整数 1110111100 转换为八进制的结果为 1674:

    在这里插入图片描述
    结果为 1674(八进制)

    八进制整数转换为二进制整数时,思路是相反的,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将八进制整数 2743 转换为二进制:
    在这里插入图片描述
    结果为010111100011(二进制)

    二进制整数和十六进制整数之间的转换

    二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。下图演示了如何将二进制整数 10 1101 0101 1100 转换为十六进制:
    在这里插入图片描述
    二进制整数 10 1101 0101 1100 转换为十六进制的结果为 2D5C(注意:十进制数要按十六进制数对应的表示法表示)。

    十六进制整数转换为二进制整数时,思路是相反的,每一位十六进制数字转换为四位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将十六进制整数 A5D6 转换为二进制:

    在这里插入图片描述
    从图中可以看出,十六进制整数 A5D6 转换为二进制的结果为 1010 0101 1101 0110。

    展开全文
  • 数制与数制转换数制是用一组固定的符号和统一的规则来表示数值的方法。在数值计算中,一般采用进位计数制:用进位的方法进行计数。在日常生活中,人们习惯使用十进制。而在数字系统中常采用二进制。为了阅读与书写的...

    数制与数制转换

    81b5852d56473edb90e0cbd4914a29c1.png

    数制是用一组固定的符号和统一的规则来表示数值的方法。

    在数值计算中,一般采用进位计数制:用进位的方法进行计数。

    在日常生活中,人们习惯使用十进制。而在数字系统中常采用二进制。

    为了阅读与书写的方便,在数字系统中还使用八进制和十六进制。

    在进位计数制中,数的表示涉及两个基本问题:基数

    下面首先看一下我们最熟悉的数制:十进制。

    一、数制

    1.十进制

    十进制是我们每天都在使用的一种数制,它具有如下特点:

    1. 十进制采用十个计数符号:0,1,2,3,4,5,6,7,8,9
    2. 十进制采用逢十进一的进位规则。(由于十进制采用十个计数符号和逢十进一的进位规则,因此十进制的基数为10)
    3. 十进制采用位置计数法。即同一个符号在不同的位置时,它所代表的数值是不同的。 如下图,其中整数部分第四位的"1"代表的数值为1000,第二位的"1"代表的数值为10。

    01065ba4ab804aeb46c460a0ad4152a7.png

    我们为十进制数中的每一个计数符号位分配一个基数10的整数次幂。整数的为10的正次幂,从10的零次方开始,从右向左递增;小数的权为10的负次幂,从10的-1次方开始,从左向右递减。 则任何一个十进制数D,可以表示为加权系数之和。

    a9713b056c6a68ddde2955a20757fb20.png

    其中,n为整数位个数,m为小数位个数,di为第i位的计数符号,称之为系数(上面这个臭臭公式可以不看,ta太抽象了)。

    2.二进制

    下面我们来看二进制。

    1. 二进制有两个计数符号:0,1
    2. 进位规则为逢二进一,因此基数为2.
    3. 与十进制一样,二进制采用位置计数法。 如下图,不同位置的"1"代表的值是不同的。从左到右四个1分别代表2的2次方,2的0次方,2的-1次方和2的-2次方。

    8c8ce51e5ac447544510fc0e3e80381c.png

    我们为二进制数中的每一个计数符号位分配一个权,权为基数2的整数次幂。整数的权为2的正次幂,从2的0次方开始,从右向左递增;小数的权为2的负次幂,从2的-1次方开始,从左向右递减。 则任何一个十进制数B,可以表示为加权系数之和。

    66d34e2c31f816299572874e768532af.png

    其中,n为整数位个数,m为小数位个数,bi为第i位的计数符号,称之为系数(上面这个臭臭公式可以不看,ta太抽象了)。

    3.十六进制

    和前面两个数制类似,我就直接盗图了。

    866235a2beb46adc117ad1d4e8ced53a.png

    4.八进制

    d915df33fee04685afa4d1a76f02a249.png

    二、数制转换

    前面我们介绍了几种数制,它们之间可以互相转换。

    下面介绍二进制数和十进制数之间的转换。

    我们知道,二进制数可以表示为加权系数之和,因此把加权系数之和的表达式展开,然后按照十进制数运算规则进行运算,就可以求得等值的十进制数。例如下图所示,

    8daa5420bb824265942ee4b64c0c78b6.png

    另外还有基数连乘、连除法,实现二进制数到十进制数的转换,此处不作介绍。

    反过来怎样把十进制数转换为二进制数呢?

    第一种方法叫做提取2的幂法,它是刚刚讲过的,用按权展开法把二进制数转换为十进制数运算过程的逆过程。也就是将十进制数分解为加权系数之和。

    0bb59d6b0793cd89453b41f28aa501d1.png

    第二种方法是基数连乘、连除法。

    十进制数的整数部分采用连除法,即,把十进制整数连续除以2,直到商等于零,然后 把每次所得余数按相反次序排列,就可以得到等值的二进制数。例如下图所示。

    09423b2a8dc08e89480ed3bf192b54d5.png

    十进制数的小数部分采用连乘法,即,把十进制小数连续乘以2,直到小数部分等于零或者达到规定的位数。然后把每次所得整数按序排列,就可以得到等值的十进制数。例如下图所示。

    c3ee5fd9464eeba48398b001bd771929.png

    需要注意的是,不是每一个十进制小数连续乘以2,最后都可以导致小数部分等于0,此时应该采用等精度的有效位数表示方法。

    可以推导,一个m位的十进制小数,需要(3m+1)位二进制小数才能保持等精度。(我也不知道啦,先背过再说)。例如十进制数0.37,需要7位二进制数0.0101111来表示。

    数制与转换部分就到这里结束了。

    参考视频链接:第一单元 数字逻辑基础-第一讲 数制-视频1

    顺便放一个用C语言来实现求补码的文章-[关于求负数补码](关于求负数补码 - 剑冢、 - 博客园)

    展开全文
  • 网络中计算机的32位IPv4地址以...二进制数制系统IPv4地址以二进制开头,仅包含0和1。主机,服务器和网络设备均使用二进制编址,即IPv4地址。每个地址包含32位字符串,分为四个部分,被称为二进制八位组。e.g. 11000...

    网络中计算机的32位IPv4地址以二进制显示,也会以点分十进制显示。而IPv6的地址是128位,是由数字和A-F组成的十六进制系统。因此,了解并且学会在其三者之间相互转换是非常重要的,让我们能够更好的了解它们。

    二进制数制系统

    IPv4地址以二进制开头,仅包含0和1。主机,服务器和网络设备均使用二进制编址,即IPv4地址。

    每个地址包含32位字符串,分为四个部分,被称为二进制八位组。e.g. 11000000.10101000.00001010.00001010

    为了方便使用,IPv4地址通常表达为点分十进制记法。

    二进制位置记法

    在进入二进制之前,我们看一下日常最熟悉的十进制的位置计数法。十进制以10为基数,即各位数的值为0-9。

    29443f3c1bf3161e1da1b95431dbd17d.png

    举个例子,1009 = 1*10³ + 0*10² + 0*10¹ + 9*10⁰

    相似地,2为基数的二进制也是如此,各位数为0-1

    b45fb013b79c51213c58baadfa3025f3.png

    举个例子,11000000 => 1*2⁷ + 1*2⁶ + 2⁵ + 2⁴ + 2³ + 2² + 2⁰ = 192

    这样就把二进制通过位置计数法计算转换成了十进制。

    从十进制到二进制

    我们已经学会了从二进制转换到十进制,现在开始学习十进制到二进制。

    (此处我们仅研究八位二进制数)

    假设当前的十进制数为n,我们开始转换。

    如果n>=128, 此时,第一位即为1并且n减去128,否则为0.

    接着,如果n>=64,第二位为1并减去64,否则为0.

    如果n>=32, 第三位为1并减去32,否则为0.

    根据位置值一直这样进行到与1比较并记录,最后得到的八位数即为n的二进制值。

    举个例子,n=192,

    bb4a02f70af49f37a665d485a1f53179.png

    经过一系列的比较且计算,我们得到192的二进制值为11000000,这与我们上面二进制转换成十进制结果一致。

    学习了二进制与十进制之间的相互转换,计算一下IPv4地址192.168.10.10的二进制值和11000000.10101000.00001010.00001010的十进制值,感受一下IPv4地址的转换,逐渐掌握这个技能,更好了解网络中的IPv4编址。

    十六进制数制系统

    我们解决了IPv4地址解读的问题,如开篇所说IPv6地址是以十六进制数组成。此外,在网络中,以太网MAC地址也是以十六进制数表示。

    十六进制以16为基数,其中添加了字母A-F。

    我们一起看一下十进制,二进制与十六进制值的表示

    50f09df8ef8c9df47706840b2dbf764a.png

    IPv6地址的长度为128位,其中每四位以一个十六进制数表示,一共32个十六进制值。值得一提得是IPv6地址对其中字母不区分大小写。

    二进制到十六进制

    怎样将八位得二进制转换成十六进制呢?

    首先,我们将二进制数分为两个四位的,然后分别计算两个四位的值,最后对照上面的表即可得出。

    举个例子,二进制数为11000101,先分为两个四位的二进制数,即1100和0101。然后将他们转换成十进制数,为12和5. 根据上表,对应得出十六进制数为C5,通常写作0xC5。

    (根据表中,我们无需转换成十进制数即可对应,但为了不记忆这个表,就先把它转化成十进制)

    十进制到十六进制?只要将十进制先转换为8位二进制即可根据上述方法计算得出。

    从十六进制到十进制

    首先,将十六进制分开并转换成两组四位二进制。然后,将它们拼接。最后,将这个二进制转化成十进制即可。

    举个例子,十六进制数为9F, 根据表中对应,我们可知,其对应1001与1111。拼接后为10011111,通过计算,可得十进制数为159。

    我们已经学会了二进制十进制与十六进制之间的相互转换,是不是非常简单!

    如果学会了,请给我点一个赞

    感谢阅读,如果有什么疑问欢迎评论,一起探讨!

    展开全文
  • 二进制数制系统 IPv4地址以二进制开头,仅包含0和1。主机,服务器和网络设备均使用二进制编址,即IPv4地址。 每个地址包含32位字符串,分为四个部分,被称为二进制八位组。e.g. 11000000.10101000.00001010.00001010...

    网络中计算机的32位IPv4地址以二进制显示,也会以点分十进制显示。而IPv6的地址是128位,是由数字和A-F组成的十六进制系统。因此,了解并且学会在其三者之间相互转换是非常重要的,让我们能够更好的了解它们。

    二进制数制系统

    IPv4地址以二进制开头,仅包含0和1。主机,服务器和网络设备均使用二进制编址,即IPv4地址。

    每个地址包含32位字符串,分为四个部分,被称为二进制八位组。e.g. 11000000.10101000.00001010.00001010

    为了方便使用,IPv4地址通常表达为点分十进制记法。

    二进制位置记法

    在进入二进制之前,我们看一下日常最熟悉的十进制的位置计数法。十进制以10为基数,即各位数的值为0-9。

    千位 百位 十位 个位
    位置值 1000 100 10 1
    位置号 3 2 1 0
    计算 10³ 10² 10¹ 10⁰

    举个例子,1009 = 1*10³ + 0*10² + 0*10¹ + 9*10⁰

    相似地,2为基数的二进制也是如此,各位数为0-1

    位置号 7 6 5 4 3 2 1 0
    计算 2⁷ 2⁶ 2⁵ 2⁴ 2⁰
    位置值 128 64 32 16 8 4 2 1

    举个例子,11000000 => 1*2⁷ + 1*2⁶ + 2⁵ + 2⁴ + 2³ + 2² + 2⁰ = 192

    这样就把二进制通过位置计数法计算转换成了十进制。

    从十进制到二进制

    我们已经学会了从二进制转换到十进制,现在开始学习十进制到二进制。

    (此处我们仅研究八位二进制数)

    假设当前的十进制数为n,我们开始转换。

    如果n>=128, 此时,第一位即为1并且n减去128,否则为0.

    接着,如果n>=64,第二位为1并减去64,否则为0.

    如果n>=32, 第三位为1并减去32,否则为0.

    根据位置值一直这样进行到与1比较并记录,最后得到的八位数即为n的二进制值。

    举个例子,n=192,

    位置值 128 64 32 16 8 4 2 1
    比较 >= >= < < < < < <
    比较后的值 64 0 0 0 0 0 0 0
    二进制值 1 1 0 0 0 0 0 0

    经过一系列的比较且计算,我们得到192的二进制值为11000000,这与我们上面二进制转换成十进制结果一致。

    学习了二进制与十进制之间的相互转换,计算一下IPv4地址192.168.10.10的二进制值和11000000.10101000.00001010.00001010的十进制值,感受一下IPv4地址的转换,逐渐掌握这个技能,更好了解网络中的IPv4编址。

    十六进制数制系统

    我们解决了IPv4地址解读的问题,如开篇所说IPv6地址是以十六进制数组成。此外,在网络中,以太网MAC地址也是以十六进制数表示。

    十六进制以16为基数,其中添加了字母A-F。

    我们一起看一下十进制,二进制与十六进制值的表示

    十进制 二进制 十六进制
    0 0000 0
    1 0001 1
    2 0010 2
    3 0011 3
    4 0100 4
    5 0101 5
    6 0110 6
    7 0111 7
    8 1000 8
    9 1001 9
    10 1010 A
    11 1011 B
    12 1100 C
    13 1101 D
    14 1110 E
    16 1111 F

    IPv6地址的长度为128位,其中每四位以一个十六进制数表示,一共32个十六进制值。值得一提得是IPv6地址对其中字母不区分大小写。

    二进制到十六进制

    怎样将八位得二进制转换成十六进制呢?

    首先,我们将二进制数分为两个四位的,然后分别计算两个四位的值,最后对照上面的表即可得出。

    举个例子,二进制数为11000101,先分为两个四位的二进制数,即1100和0101。然后将他们转换成十进制数,为12和5. 根据上表,对应得出十六进制数为C5,通常写作0xC5。

    (根据表中,我们无需转换成十进制数即可对应,但为了不记忆这个表,就先把它转化成十进制)

    十进制到十六进制?只要将十进制先转换为8位二进制即可根据上述方法计算得出。

    从十六进制到十进制

    首先,将十六进制分开并转换成两组四位二进制。然后,将它们拼接。最后,将这个二进制转化成十进制即可。

    举个例子,十六进制数为9F, 根据表中对应,我们可知,其对应1001与1111。拼接后为10011111,通过计算,可得十进制数为159。




    🆗我们已经学会了二进制十进制与十六进制之间的相互转换,是不是非常简单!

    如果学会了,请给我点一个赞👍

    感谢阅读,如果有什么疑问欢迎评论,一起探讨!

    展开全文
  • 设计实现十进制数与二进制数的数制转换程序,要求进行某种数制转换后,输入相应的格式的数值(可以是混合小数的形式),给出相应进制的数值。熟练掌握队列相关操作、   三、 实验内容 1. 用C语言实现队列的存储...
  • 二进制与十进制的转换教案

    万次阅读 多人点赞 2019-02-19 22:47:10
    3、熟练掌握二进制与十进制之间的转换方法。 【课时安排】 1课时。 【教学重点与难点】 1、难点:位权表示法 十进制转化为二进制  2、重点:二、十进制间相互转换 【教学过程】 (以下教师的语言、活动简称...
  • 数制与数制转换 1.数制介绍: 数制是一种计数的方法,就是用一组固定的符号和统一的规则来表示数制的方法. 数位指数字符号在一个数中所处的位置 基数是指在某种进位计数制中,数位上所能使用的数字符号的个数. 位权指在...
  • 所以就存在十进制与二进制之间的转换,但是由于二进制表示数据起来不方面(特别是当数值比较大时),十进制转换二进制又比较麻烦,就产生了八进制、十六进制 进制对照表 二进制、八进制、十六进制转换为十...
  • 进制 二进制是计算技术中被广泛采用的一种数制,是使用0和1两个数码来表示的数字的数制。 所有数字在计算机底层都以二进制形式存在 对于整数,有四种表示方式: ...二进制(binary):0️...十进制与二进制间的转换
  • 【如有不足之处,请多多包涵,后续根据情况可继续对此发表推文】✎二进制二进制是计算技术中广泛采用的一种数制二进制数据是用0和1两个数码来表示的数。简单来说也就是二进制数只有0和1组成!(必须是...
  • 十进制和二进制的相互转换

    千次阅读 2019-04-08 08:59:02
    十进制是人类最为方便的进制表示也是日常生活中最常用的数制,但用计算机处理十进制数必须要把十进制数转换二进制数。 十进制转成二进制:取余法 将88转换二进制 88除以2 商为44 余数为0 44除以2 商为22 余数为0...
  • 一、数制与数制转换 数制:进位计数制,采用进位的方式来计数 八进制和十六进制可以方便的与二进制进行相互转换,因此这两种进制一般可以用来表示数值较大的二进制。 1)权:把一种数制中各位计数符号为1时所...
  • 十进制是人们习惯使用的进制,而在计算机中存储的数是采用二进制,但为了表示记忆方便,还引入了八进制和十六进制。十进制的特点是有10个数码:0~9,进位关系是"逢十进一"。而在计算机中数的表示是采用二进制...
  • 认识信号光纤、数制转换、IP划分一、信号光纤1.1 信号1.2 光纤1.2.1 光纤的特点1.2.2 双绞线的连接规范:1.3 无线传输数制转换2.1 单位换算2.2 数制转换2.2.1 计算机进制2.2.2 数制转换三、IP划分3.1 IP ...
  • 数制转换

    2017-11-25 10:48:38
    1.十进制与二进制数据相互转换 十进制到二进制转换,通常要区分数的整数部分和小数部分,可以分别按除2取余数部分和乘2取整数部分两种不同的方法来完成。下面以一个例题介绍十进制转换二进制。 查看例题 ...
  • 2,计算机网络常见设设备标准网络拓扑结构 IEEE 802局域网标准 IEEE 802,3标准:该标准是是办公自动化中首选的以太网标准。 IEEE 802.11标准:无线局域网标准,主要用于解决办公室和校园等局域网中用户终端的...
  • 计算机采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径,节省设备等优点,为了便于描述,又常用八.十六进制作为二进制的缩写。特点: (1)逢n进一,n是每种进位进数制表示一位...
  • 网络布线与数制转换

    2020-07-09 23:11:33
    网络布线与数制转换 信号的分类: 模拟信号:模拟信号是指用连续变化的物理量表示的信息,其信号的幅度,或频率,或相位随时间作连续变化,或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意...
  • 数制与数制转换

    2019-09-10 16:11:00
    一、数制与数制转换 数制:进位计数制,采用进位的方式来计数 八进制和十六进制可以方便的与二进制进行相互转换,因此这两种进制一般可以用来表示数值较大的二进制。 1)权:把一种数制中各位计数符号为1时所代表的...
  • 数制转换与IP子网划分一、数制转换1.计算机中存储单位的换算2.计算机的数制3.数值转换1)各进制数转换为十进制数2)十进制数转换为二进制数3)二进制数转换为八、十六进制数二、IP 子网划分1.IP 地址的分类1)公有...
  • 进制转换

    2019-06-04 20:15:14
    本章内容 进制转换 数制的概念:数制也称进制或计数制,是指用一组固定的符号和统一的规则来表示数值的方法. ... 二进制与十六进制之间的转换 二进制与八进制之间的转换 任意进制转换为十进...
  • 众所周知,计算机底层都是用二进制数做运算,但我们生活中用到的最多的却是十进制,当然还有八进制与十六进制。日常生活中进行进制转换时,都是一些繁琐重复的过程,现在,我们可以用JAVA语言中最原始的代码实现这一...
  • 二进制BCD码转换一、实验目的1.掌握简单的数值转换算法2.基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础。掌握各种数制之间的转换是一种基本功。我们将给定的一字节二进制...
  • 网络布线与数制转换 一、信号概述 信号是表示消息的物理量 1.信号的分类 1.1 模拟信号 模拟信号是连续变化的物理量表示的信息。其信号的幅度、或频率、或相位随时间作连续变化或在一段时间间隔内,其代表信息的...
  • 一、二进制数:位、字节字  位:只有0、1两种状态,简称bit;  字节:由8个二进制数组成,称为8位,简称BYTE  字:由两个字节组成,简称DWORD。1字=2字节=32位  例如:U盘的单位是GB(GBYTE),字节。网速...
  • 网络布线与数制转换 什么叫信息、数据、信号?三者间的关系? 信息是一切事物存在方式和运动状态的本质属性和客观反映。 在计算机网络中: 信息可以解释为数据、消息中所包含的意义,可以使它们所描述的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389
精华内容 155
关键字:

二进制与数制转换