精华内容
参与话题
问答
  • 二进制、八进制、十进制与十六进制  转自:http://yuanbin.blog.51cto.com/363003/111161/ 一、 进制的概念 在计算机语言中常用的进制有二进制、八进制、十进制和十六进制,十进制是最主要的表达形式。 ...
    二进制、八进制、十进制与十六进制
     转自:http://yuanbin.blog.51cto.com/363003/111161/
    一、 进制的概念
    在计算机语言中常用的进制有二进制、八进制、十进制和十六进制,十进制是最主要的表达形式。
     
    对于进制,有两个基本的概念:基数和运算规则。
    基数:基数是指一种进制中组成的基本数字,也就是不能再进行拆分的数字。二进制是0和1;八进制是0-7;十进制是0-9;十六进制是0-9+A-F(大小写均可)。也可以这样简单记忆,假设是n进制的话,基数就是【0,n-1】的数字,基数的个数和进制值相同,二进制有两个基数,十进制有十个基数,依次类推。
    运算规则:运算规则就是进位或错位规则。例如对于二进制来说,该规则是“满二进一,借一当二”;对于十进制来说,该规则是“满十进一,借一当十”。其他进制也是这样。
     
    二、 二、八、十、十六进制基数对照表
    ScreenShot00314
     
    三、 二进制转化成其他进制
    1. 二进制(Binary)——>八进制(Octal)
    例子1:将二进制数(10010)2转化成八进制数。
    (10010)2=(010 010)2=(2 2)8=(22)8
    例子2:将二进制数(0.1010)2转化为八进制数。
    (0.10101)2=(0. 101 010)2=(0. 5 2)8=(0.52)8
    诀窍:因为每三位二进制数对应一位八进制数,所以,以小数点为界,整数位则将二进制数从右向左每3位一隔开,不足3位的在左边用0填补即可;小数位则将二进制数从左向右每3位一隔开,不足3位的在右边用0填补即可。
     
    2. 二进制(Binary)——>十进制(Decimal)
    例子1:将二进制数(10010)2转化成十进制数。
    (10010)2=(1x24+0x23+0x22+1x21+0x20)10=(16+0+0+2+0)10=(18) 10
    例子2:将二进制数(0.10101)2转化为十进制数。
    (0.10101)2=(0+1x2-1+0x2-2+1x2-3+0x2-4+1x2-5)10=(0+0.5+0.25+0.125+0.0625+0.03125)10=(0.96875)10
    诀窍:以小数点为界,整数位从最后一位(从右向左)开始算,依次列为第0、1、2、3………n,然后将第n位的数(0或1)乘以2的n-1次方,然后相加即可得到整数位的十进制数;小数位则从左向右开始算,依次列为第1、2、3……..n,然后将第n位的数(0或1)乘以2的-n次方,然后相加即可得到小数位的十进制数(按权相加法
     
    3. 二进制(Binary)——>十六进制(Hex)
    例子1:将二进制数(10010)2转化成十六进制数。
    (10010)2=(0001 0010)2=(1 2)16=(12) 16
    例子2:将二进制数(0.1010)2转化为十六进制数。
    (0.10101)2=(0. 1010 1000)2=(0. A 8)16=(0.A8)16
    诀窍:因为每四位二进制数对应一位十六进制数,所以,以小数点为界,整数位则将二进制数从右向左每4位一隔开,不足4位的在左边用0填补即可;小数位则将二进制数从左向右每4位一隔开,不足4位的在右边用0填补即可。
     
    (10010)2=(22)8=(18) 10=(12)16
    (0.10101)2=(0.52)8=(0.96875)10=(0.A8)16
     
    四、 八进制转化成其他进制
    1. 八进制(Octal)——>二进制(Binary)
    例子1:将八进制数(751)8转换成二进制数。
    (751)8=(7 5 1)8=(111 101 001)2=(111101001)2
    例子2:将八进制数(0.16)8转换成二进制数。
    (0.16)8=(0. 1 6)8=(0. 001 110)2=(0.00111)2
    诀窍:八进制转换成二进制与二进制转换成八进制相反。
     
    2. 八进制(Octal)——>十进制(Decimal)
    例子1:将八进制数(751)8转换成十进制数。
    (751)8=(7x82+5x81+1x80)10=(448+40+1)10=(489)10
    例子2:将八进制数(0.16)8转换成十进制数。
    (0.16)8=(0+1x8-1+6x8-2)10=(0+0.125+0.09375)10=(0.21875)10
    诀窍:方法同二进制转换成十进制。以小数点为界,整数位从最后一位(从右向左)开始算,依次列为第0、1、2、3………n,然后将第n位的数(0-7)乘以8的n-1次方,然后相加即可得到整数位的十进制数;小数位则从左向右开始算,依次列为第1、2、3……..n,然后将第n位的数(0-7)乘以8的-n次方,然后相加即可得到小数位的十进制数(按权相加法)。
     
    3. 八进制(Octal)——>十六进制(Hex)
    例子1:将八进制数(751)8转换成十六进制数。
    (751)8=(111101001)2=(0001 1110 1001)2=(1 E 9)16=(1E9)16
    例子2:将八进制数(0.16)8转换成十六进制数。
    (0.16)8=(0.00111)2=(0. 0011 1000)2=(0.38)16
    诀窍:八进制直接转换成十六进制比较费力,因此,最好先将八进制转换成二进制,然后再转换成十六进制。
     
    (751)8=(111101001)2=(489)10=(1E9)16
    (0.16)8=(0.00111)2=(0.21875)10=(0.38)16
     
    五、 十进制转化成其他进制
    1. 十进制(Decimal)——>二进制(Binary)
    例子1:将十进制数(93)10转换成二进制数。
    93/2=46……….1
    46/2=23……….0
    23/2=11……….1
    11/2=5…………1
    5/2=2…………...1
    2/2=1……………0
    (93)10=(1011101)2
    例子2:将十进制数(0.3125)10转换成二进制数。
    0.3125x2 = 0 . 625
    0.625x2 = 1 .25
    0.25x2 = 0 .5
    0.5x2 = 1 .0
    (0.3125)10=(0.0101)2
    诀窍:以小数点为界,整数部分除以2,然后取每次得到的商和余数,用商继续和2相除,直到商小于2。然后把第一次得到的余数作为二进制的个位,第二次得到的余数作为二进制的十位,依次类推,最后一次得到的小于2的商作为二进制的最高位,这样由商+余数组成的数字就是转换后二进制的值(整数部分用除2取余法);小数部分则先乘2,然后获得运算结果的整数部分,将结果中的小数部分再次乘2,直到小数部分为零。然后把第一次得到的整数部分作为二进制小数的最高位,后续的整数部分依次作为低位,这样由各整数部分组成的数字就是转化后二进制小数的值(小数部分用乘2取整法)。需要说明的是,有些十进制小数无法准确的用二进制进行表达,所以转换时符合一定的精度即可,这也是为什么计算机的浮点数运算不准确的原因。
     
    2. 十进制(Decimal)——>八进制(Octal)
    例子1:将十进制数(93)10转换成八进制数。
    93/8=11………….5
    11/8=1……………3
    (93)10=(135)8
    例子2: 将十进制数(0.3125)10转换成八进制数。
    0.3125x8 = 2 .5
    0.5x8 = 4 .0
    (0.3125)10=(0.24)8
    诀窍:方法同十进制转化成二进制。以小数点为界,整数部分除以8,然后取每次得到的商和余数,用商继续和8相除,直到商小于8。然后把第一次得到的余数作为八进制的个位,第二次得到的余数作为八进制的十位,依次类推,最后一次得到的小于8的商作为八进制的最高位,这样由商+余数组成的数字就是转换后八进制的值(整数部分用除8取余法); 小数部分则先乘8,然后获得运算结果的整数部分,将结果中的小数部分再次乘8,直到小数部分为零。然后把第一次得到的整数部分作为八进制小数的最高位,后续的整数部分依次作为低位,这样由各整数部分组成的数字就是转化后八进制小数的值(小数部分用乘8取整法)。
     
    3. 十进制(Decimal)——>十六进制(Hex)
    例子1:将十进制数(93)10转换成十六进制数。
    93/16=5……..13D
    (93)10=(5D)16
    例子2: 将十进制数(0.3125)10转换成十六进制数。
    0.3125x16 = 5 .0
    (0.3125)10=(0.5)16
    诀窍:方法同十进制转化成二进制。以小数点为界,整数部分除以16,然后取每次得到的商和余数,用商继续和16相除,直到商小于16。然后把第一次得到的余数作为十六进制的个位,第二次得到的余数作为十六进制的十位,依次类推,最后一次得到的小于16的商作为十六进制的最高位,这样由商+余数组成的数字就是转换后十六进制的值(整数部分用除16取余法); 小数部分则先乘16,然后获得运算结果的整数部分,将结果中的小数部分再次乘16,直到小数部分为零。然后把第一次得到的整数部分作为十六进制小数的最高位,后续的整数部分依次作为低位,这样由各整数部分组成的数字就是转化后十六进制小数的值(小数部分用乘16取整法)。
     
    (93)10=(1011101)2=(135)8=(5D)16
    (0.3125)10=(0.0101)2=(0.24)8=(0.5)16
     
    六、 十六进制转换成其他进制
    1. 十六进制(Hex)——>二进制(Binary)
    例子1:将十六进制数(A7)16转换成二进制数。
    (A7)16=(A 7)16=(1010 0111)2=(10100111)2
    例子2:将十六进制数(0.D4)16转换成二进制数。
    (0.D4)16=(0. D 4)16=(0. 1101 0100)2=(0.110101)2
    诀窍:十六进制转换成二进制与二进制转换成十六进制相反。
     
    2. 十六进制(Hex)——>八进制(Octal)
    例子1:将十六进制数(A7)16转换成八进制数。
    (A7)16=(10100111)2=(010 100 111)8=(247)8
    例子2:将十六进制数(0.D4)16转换成八进制数。
    (0.D4)16=(0.110101)2=(0. 110 101)8=(0.65)8
    诀窍:十六进制直接转换成八进制比较费力,因此,最好先将十六进制转换成二进制,然后再转换成八进制。
     
    3. 十六进制(Hex)——>十进制(Decimal)
    例子1:将十六进制数(A7)16转换成十进制数。
    (A7)16=(10x161+7x160)10=(160+7)10=(167)10
    例子2:将十六进制数(0.D4)16转换成十进制数。
    (0.D4)16=(0+13x16-1+4x16-2)10=(0+0.8125+0.015625)10=(0.828125)10
    诀窍:方法同二进制转换成十进制。以小数点为界,整数位从最后一位(从右向左)开始算,依次列为第0、1、2、3………n,然后将第n位的数(0-9,A-F)乘以16的n-1次方,然后相加即可得到整数位的十进制数;小数位则从左向右开始算,依次列为第1、2、3……..n,然后将第n位的数(0-9,A-F)乘以16的-n次方,然后相加即可得到小数位的十进制数(按权相加法)。
     
    (A7)16=(10100111)2=(247)8=(167)10
    (0.D4)16=(0.110101)2=(0.65)8=(0.828125)10
     
    七、 总结
    1. 其他进制转十进制:将二进制数、八进制数、十六进制数的各位数字分别乘以各自基数的(N-1)次方,其相加之和便是相应的十进制数,这是按权相加法
    2. 十进制转其他进制:整数部分用除基取余法,小数部分用乘基取整法,然后将整数与小数部分拼接成一个数作为转换的最后结果。
    3. 二进制转八进制:从小数点位置开始,整数部分向左,小数部分向右,每三位二进制为一组用一位八进制的数字来表示,不足三位的用0补足。
    4. 八进制转二进制:与二进制转八进制相反。
    5. 二进制转十六进制:从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示,不足四位的用0补足。
    6. 十六进制转二进制:与二进制转十六进制相反。
    7. 八进制转十六进制:通常将八进制转换成二进制,然后通过二进制再转换成十六进制。
    8. 十六进制转八进制:通常将十六进制转换成二进制,然后通过二进制再转换成八进制。
    展开全文
  • 十进制与任意进制的转换

    千次阅读 2018-10-23 18:06:48
    进制转换任意进制转为十进制代码实现十进制转为任意进制代码实现 任意进制转为十进制 方法:∑i n 系数X基数权值(累加) 将二进制转成十进制 10110110 = 1×27+1×25+1×24+1×22+1×2 = 128+32+16+4+2=182 182 = ...


    任意进制转为十进制

    方法:i n 系数X基数权值累加

    将二进制转成十进制
    10110110 = 1×27+1×25+1×24+1×22+1×2 = 128+32+16+4+2=182

    182 = 1×102+8×101+2×100 = 100 +80 + 2 =182

    代码实现

    代码实现选择从后向前遍历,将控制台输入的数字以字符串存储

    public class Main {
        public static void main(String []args){
            String input ="10110110";
            char in[]=input.toCharArray();
            double value=0;//十进制数值
            int j=0;//阶数
            double temp;
            for(int i=in.length-1;i>=0;i--){
                //从后向前由小阶数开始进行计算
                temp=Math.pow(2,j++);
                value+=(in[i]-'0')*temp;
            }
            System.out.printf("%2.0f",value);
        }
    }
    

    输出为:182

    十进制转为任意进制

    方法:这个数对基数依次取余,将余数倒序输出,在倒序输出余数之前正序输出最后一次的商。这个方法是很简单的一种方式,可以大大的节省时间

    将十进制转成八进制
    579 / 8 = 72 ...3
    72 / 8 =9 ...0
    9 / 8 =1 ...1

    先输出最后一次计算的商,然后倒序从下到上输出余数
    八进制的 576 为 1103

    代码实现

    //模拟十进制579转成8进制
    
    public class Main {
        public static void main(String []args){
            int B =579;//需转换的数
            int D =8;  //基数
            int temp[]=new int[100];
            int i=0;
            //十进制到任意进制,这个数对基数依次取余,倒序输出,在之前正序输出最后一个商
            while (B/D!=0){
                temp[i]=B%D;
                B=B/D;
                i++;
            }
            System.out.print(B);//输出第一个商
    
            for(int j=i-1;j>=0;j--)
                System.out.print(temp[j]);//倒数输出余数
        }
    }
    

    输出为 1103

    展开全文
  • 十进制和二进制的相互转换

    千次阅读 2019-04-08 08:59:02
    十进制是人类最为方便的进制表示也是日常生活中最常用的数制,但用计算机处理十进制数必须要把十进制数转换成二进制数。 十进制转成二进制:取余法 将88转换成二进制 88除以2 商为44 余数为0 44除以2 商为22 余数为0...

    开发工具与关键技术:MyEclipse 10 JAVA
    作者:黄冠棋
    撰写时间:2019年04月7日

    十进制是人类最为方便的进制表示也是日常生活中最常用的数制,但用计算机处理十进制数必须要把十进制数转换成二进制数。
    十进制转成二进制:取余法
    将88转换成二进制
    88除以2 商为44 余数为0
    44除以2 商为22 余数为0
    22除以2 商为11 余数为0
    11除以2 商为5 余数为1
    5除以2 商为2 余数为1
    2除以2 商为1余数为0
    1除以2 商为0余数为1
    把余数倒写就成了1011000
    在这里插入图片描述
    二进制转成十进制:数值进制^(数值所在位数-1)
    将1011000 转换成十进制
    第七位是1 即 1
    2^6
    第六位是0 即 02^5
    第五位是1 即 1
    2^4
    第四位是1 即 12^3
    第三位是0 即 0
    2^2
    第二位是0 即 02^1
    第一位是0 即 0
    2^0
    把结果相加就等于88

    在这里插入图片描述

    展开全文
  • 十进制数与N进制的转换

    千次阅读 2018-09-29 12:35:02
    1)问题描述:将从键盘输入的十进制数转换为N(如二进制,八进制,十六进制)进制数据。 2)要求:利用顺序栈实现数制转换问题 代码(c语言) #include<stdio.h> #include<stdlib.h> //...



    题目

    1)问题描述:将从键盘输入的十进制数转换为N(如二进制,八进制,十六进制)进制数据。

    2)要求:利用顺序栈实现数制转换问题


    代码(c语言)

    #include<stdio.h>
    #include<stdlib.h>
    
    //定义栈结构
    typedef struct stack{
    	int num[50];
    	int tap;
    }Stack;
    
    //声明函数
    void setTable(char* table);
    void push(int number);
    int pop();
    int isEmpty();
    
    //声明全局变量
    Stack *stack;
    
    void main(){
    	int number,radix;	//number-被转换数	radix-转换进制
    
    	char table[36];		//定于数字字母匹配表
    	setTable(table);
    
    	printf("输入十进制数字:");
    	scanf("%d",&number);
        printf("输入要转换的进制:");
    	scanf("%d",&radix);
    
    	stack = (Stack*)malloc(sizeof(Stack));	
    	stack->tap=0;
    
        //短除法
    	while(true){
    		push( number % radix);
    		number = number/radix;
    		if(number == 0)break;
    	}
    
    	printf("结果为:");
    	while(isEmpty() == 0){
    		printf("%c",table[pop()]);
    	}
    	putchar(10);//换行
    }
    
    //填充数字字母表
    void setTable(char table[]){
    	int i = 0;
    	for(;i<10;i++){
    		table[i]='0'+i;
    	}
    	for(;i<37;i++){
    		table[i]='A'+i-10;
    	}
    }
    
    //入栈
    void push(int number){
    	stack->num[stack->tap] = number;
    	stack->tap = stack->tap + 1;
    }
    
    //出栈
    int pop(){
    	stack->tap = stack->tap - 1;
    	return  stack->num[stack->tap];
    }
    
    //判断是否为空
    int isEmpty(){
    	if(stack->tap == 0)return 1;
    	else return 0;
    }
    

    解析

    1.题目思路

    因为这是一道10进制转换N进制的题目,所以算法应该采用短除法

    EG:十进制:10 转换成 二进制:1010

    ​ (第一次) 10%2 = 0 , 10/2 = 5

    ​ (第二次) 5 % 2 = 1 , 5/2 = 2

    ​ (第三次) 2 % 2 = 0 , 2/2 = 1

    ​ (第四次) 1 % 2 = 1 , 1/2 = 0

    这时候发现规律了吧----短除算法计算的结果是从低位开始的(逆序的)。

    那么,这样一种方式就可以利用栈的先进后出特性来得到正确的结果。

    2.实现的方法

    • 需要有一张表可以表示0-9 A-Z的字符
    • 在循环中,每次短除的余数压入栈中,直到被除数为0为止。需要得到结果的时候,再一个一个地出栈并且去数字字母表找到匹配字符进行保存或者输出。

    小结

    在一些需要逆序操作的时候,可以考虑下栈或者是递归

    展开全文
  • 进制转换:二进制、八进制、十六进制、十进制之间的转换 不同进制之间的转换在编程中经常会用到,尤其是C语言。 将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易,就是...
  • 十进制转换成十六进制

    千次阅读 2019-04-05 16:27:59
    #include<stdio.h> void DtoH(int n) { if(n!=0)//写成while(n)出现死循环 { DtoH(n>>4); int fbit=n&0x0f; // printf("%d %d\n",n/16,fbit); if(fbit<=9) { ... ...
  • 输入一个十进制整数,将这个数转化成对应的十五进制数(在十五进制中,A表示10,B表示11,C表示12,D表示13,E表示14),请写出转换程序。 例如:235表示为10A 代码实现 package test; import java.util....
  • 二进制,八进制,十进制,十六进制之间的转换

    万次阅读 多人点赞 2018-07-09 20:12:13
    1.前言 每次放假最无聊的事情,就是不想起床,不想吃饭,方正就是不想动,躺在床上,看着手机,无聊的刷着QQ空间,虽然现在已经很少人玩QQ空间,可是这种习惯一直保持到现在,都没有改变过,电脑上的QQ突然闪动着,...
  • 二进制如何转十进制十进制如何转二进制

    万次阅读 多人点赞 2018-04-06 17:57:29
    学计算机的朋友刚开始学习时都要接触进制之间的转换,二进制、十进制、八进制、十六进制等,这个是很枯燥的,转来转去就转蒙圈了,别蒙别蒙,今天咱们一个一个搞定,看看二进制和十进制之间如何相互转换的。...
  • 十进制转R进制 十进制转二进制 十进制整数转二进制 十进制整数转换成二进制采用“除2倒取余”,十进制小数转换成二进制小数采用“乘2取整”。 例题: 135D = __ B 解析:如下图所示,将135除以2,得余数,直到...
  • 二进制和十进制的转换

    万次阅读 多人点赞 2018-04-29 00:06:47
    一、十进制转换成二进制 1.1 正整数转二进制 要点:除二取余,倒序排列,高位补零。 方法:将正的十进制数除以二,得到的商再除以二,依次类推直至商为0或1时为止,然后在旁边标出各步的余数,最后倒着写出来,...
  • 输入一个2进制的数,要求输出该2进制数的3进制表示。在3进制的表示中,只有0,1,2三种符号。 # include <stdio.h> # include <string.h> int main (void) { int t; scanf("%d",&t); while(t--) {...
  • 二进制、八进制、十进制、十六进制关系及转换

    万次阅读 多人点赞 2019-02-21 21:20:22
    二进制,八进制,十进制,十六进制之间的关系是什么?浮点数是什么回事? 本文内容参考自王达老师的《深入理解计算机网络》一书&amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;中国水利水电出版社&amp;amp;amp;amp...
  • C语言算法之将十进制数转换成二进制数

    万次阅读 多人点赞 2018-06-20 14:35:29
    导语:在C语言中没有将...下面给大家讲述一下如何编程实现将十进制数转换成二进制数。 先将源代码展示给大家: #include &lt;stdio.h&gt; void main() { //进制转换函数的声明 int transfer(int x)...
  • 十进制与二进制之间的转换 十进制转换二进制 C++实现十进制转换二进制 二进制转换十进制 C++实现二进制转换十进制 十进制与二进制之间的转换 十进制转换二进制 十进制对2整除,得到的余数的倒序即为转换而成...
  • C++编程积累——C++实现十进制与二进制之间的互相转换 十进制与十六进制之间的转换 十进制转换十六进制 与二进制类似,十进制转十六进制对16整除,得到的余数的倒序即为转换而成的十六进制,特别地,如果超过10...
  • 常用的进制有二进制,八进制,十进制,十六进制。 二.将整数转换成十六进制 二.一 将int整数转换成十六进制(一) 先写一个主方法,接下来,所有的方法都是通过main 方法来调用的。 不用Junit测试。 做静态的方法,...
  • JAVA:二进制与十进制转换

    万次阅读 2017-07-12 21:24:48
    十进制转换为二进制 将二进制转换为十进制 1. 将十进制转换为二进制: 思路:对十进制的数进行除2取余法: /** * 讲10 进制转化为二进制 * @param de :待转换的十进制 * @return :转换后的二进制(string)...
  • 十进制转二进制函数实现(C语言)

    万次阅读 多人点赞 2017-12-03 12:04:29
    代码: void dectobin( int n ){ int result=0,k=1,i,temp; temp = n; while(temp){ i = temp%2; result = k * i + result; k = k*10; temp = temp/2; } printf("%d\n", result); }
  • 十进制转二进制的几种解法(c++)

    千次阅读 2015-01-22 11:05:29
    十进制转二进制

空空如也

1 2 3 4 5 ... 20
收藏数 456,303
精华内容 182,521
关键字:

十进制