半小时掌握进制转换!

什么是进制转换

进制转换是人们利用符号来计数的方法。进制转换由一组数码符号和两个基本因素“基数”与“位权”构成。基数是指,进位计数制中所采用的数码(数制中用来表示“量”的符号)的个数。位权是指,进位制中每一固定位置对应的单位值。

– 百度百科

进制转换的本质

进制的本质就是查表,与各种的转换没有任何关系,并不是说计算八进制,就把它转为十进制计算后再转回八进制,这种思想本来就是错误的,进制的本质就是写表和查表,我们之所以对十进制的特别熟悉,就是因为我们把十进制相关的表记住了,并不是因为十进制就是进制的基础。

常用的进制

十进制

简介

人类算数采用十进制,可能跟人类有十根手指有关。亚里士多德称人类普遍使用十进制,只不过是绝大多数人生来就有10根手指这样一个解剖学事实的结果。实际上,在古代世界独立开发的有文字的记数体系中,除了巴比伦文明的楔形数字为60进制,玛雅数字为20进制外,几乎全部为十进制。只不过,这些十进制记数体系并不是按位的。

计数方法

十进制计数法是相对二进制计数法而言的,是我们日常使用最多的计数方法(俗称“逢十进一”),它的定义是:“每相邻的两个计数单位之间的进率都为十”的计数法则,就叫做“十进制计数法”。

转换

十进制与二进制的相互转换
  1. 二进制转换十进制

    由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。 例把二进制数110.11转换成十进制数。

    首先将110转换为十进制数为:

    0×20+1×21+1×22=6

    再将0.11转换成十进制数为:

    1×2-1+1×2-2=0.75

  2. 十进制转换二进制

    整数部分:除二取余,逆序排列

    小数部分:乘二取整,正序排列

    例:6.75转换为二进制

    整数部分

    ​ 6/2=3…0

    ​ 3/2=1…1

    ​ 1/2=0…1

    ​ 得:110

    小数部分

    ​ 0.75×2=1.5 1

    ​ 0.5×2=1 1

    ​ 得:11

    最终结果:110.11

十进制与八进制的相互转换

与二进制类似不过多赘述

十进制与十六进制的相互转换

与二进制类似不过多赘述

八进制

简介

Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进1。一些编程语言中常常以数字0开始表明该数字是八进制。八进制的数和二进制数可以按位对应(八进制一位对应二进制三位),因此常应用在计算机语言中。
八进制(基数为8)表示法在计算机系统中很常见,因此,我们有时能看到人们使用八进制表示法。由于十六进制一位可以对应4位二进制数字,用十六进制来表示二进制较为方便。因此,八进制的应用不如十六进制。有一些程序设计语言提供了使用八进制符号来表示数字的能力,而且还是有一些比较古老的Unix应用在使用八进制。
计算机需要数制转换,计算机内部使用二进制,二进制八进制十进制之间的数制转换,FORTRAN77 编制, 围绕二进制与小数,完成二进制八进制十进制之间的数制转换。

转换

八进制二进制的相互转换
  1. 八进制转换为二进制

    规则:按照顺序,每1位八进制数改写成等值的3位二进制数,次序不变。

    例:056转换为二进制

    101110

  2. 二进制转换为八进制

    每三位为八进制的一位

    例:101110转换为八进制

    101…5

    110…6

    得56

八进制与十进制的相互转换
  1. 八进制转换为十进制

    按权展开:

    例:056转换为十进制

    6×80+5×81=46

  2. 十进制转换为八进制

    除八取余,逆序排列

    例:46转换为八进制

    46/8=5…6

    5/8=0…5

    得56

八进制与十六进制转换

将八进制转换为二进制或十进制再转换为十六进制

需要取中间进制进行过度

二进制

简介

二进制(binary)是在数学和数字电路中指以2为基数的记数系统,是以2为基数代表系统的二进位制。这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 [1] 。数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit的缩写)

运算

加法

二进制加法有四种情况: 0+0=0,0+1=1,1+0=1,1+1=10(0 进位为1)

减法

二进制减法有四种情况:0-0=0,1-0=1,1-1=0,0-1=1

乘法

二进制乘法有四种情况: 0×0=0,1×0=0,0×1=0,1×1=1

除法

二进制除法有两种情况(除数只能为1):0÷1=0,1÷1=1

二进制与其他进制的转换

转换为十进制

按权展开求和

转换为八进制

每三位二进制为一个八进制数,每三位都按权展开求和。

转换为十六进制

每四位二进制为一个十六进制数,每四位都按权展开求和。

反码和补码

反码

反码就是在二进制的基础上每一位都取反
例:1001011的反码为0110100

补码

补码是在反码的基础上进行的加1操作
例:1001011的补码为?
先求反码:0110100
再求补码:0110101

十六进制

简介

十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制。一般用数字0到9和字母A到F(或af)表示,其中:AF表示10~15,这些称作十六进制数字。

表示方法

不同电脑系统、编程语言对于16进制数值有不同的表示方式:

  • Ada与VHDL用所基于的“数字引证”把16进制数包起来,例如“16#5A3#”。(注:Ada对整数和实数都可以使用从1到16中任何一个做为其基数。)而对于字节向量,VHDL使用字首 x 表示,例如,x"10",对应的二进制码为:“00010000”。
  • C语言、C++、Shell、Python、Java语言及其他相近的语言使用字首“0x”,例如“0x5A3”。开头的“0”令解析器更易辨认数,而“x”则代表十六进制(就如“O”代表八进制)。在“0x”中的“x”可以大写或小写。对于字符量C语言中则以x+两位十六进制数的方式表示,如xFF。
  • 十六进制转义序列:如 \x1abf4 ,可以使用任意多的十六进制数字,直至不是十六进制数字为止;
  • 16位的通用字符名(universe-character name):\u后面必须跟4个十六进制数字(不足四位前面用零补齐),表示Unicode中在0至0xFFFF之内的码位(但不能表示0xD800到0xDFFF之内的码点,Unicode标准规定这个范围内的码位保留,不表示字符);
  • 32位的通用字符名:\U后面必须跟8个十六进制数字(不足八位前面用零补齐),表示Unicode中所有可能的码位(除0xD800到0xDFFF之外)。
  • C++11引进了十六进制浮点型字面常量。例如:0x1.2p10表示 (1+2/16)×2=115210。实际上,Visual C++一直以来使用的C/C++语言标准库函数printf,%a作为类型说明符来格式化输出浮点型值即为上述格式。例如:printf("%a",1152.0);
  • C/C++在表示字符型字面常量时,可以用:
  • 在VB、MSX BASIC、Quick BASIC和FreeBASIC中,使用字首“&H”来表示。
  • 在HTML,十六进制字元可以用“x”,例如֣和֣效果应该无异。
    Intel的汇编语言中用字尾“h”来标识16进位的数(若该数以字母起首,在前面会增加一个“0”)例如“0A3Ch”、“5A3h”
    其他汇编器(AT&T、Motorola、6502),Pascal,Delphi和某些BASIC的版本使用字首“$”,例如“$5A3”
    亦有用X’5A3’这类表示方式的,如于PL/I,COBOL及JCL中。这亦是IBM装载早期操作系统的大型机与小型机上最常用的数据格式。
  • 由于表示方式没有单一、已协定的标准,所以以上的表示方式都有被使用,有时甚至在同一份论文上会出现几个不同的表示方式。但因为各方式之间没有太大的分歧,所以即使混合使用也没有构成问题。
  • 其中最常用(或常见)表示十六进制数值的方式是将 ‘0x’ 加在数字前,或在数字后加上小字 16。例如 0x2BAD 和 2BAD16都是表示十进制的11181(或1118110)。
  • 在网页设计上十六进制是很常用的。HTML和CSS使用十六进制的表示法来表示网页上的特定颜色。使用 # 的符号来表示而非用个别的符号表示十六进制。24-bit 颜色可以用 #RRGGBB 的格式来表示,RR 是颜色中红色成分的数值,GG 是颜色中绿色成分的数值,BB 颜色中蓝色成分的数值。举个例子, 红色的阴影是十进制 238,9,63 可以编成 #EE093F。

表示方法表

此中hex带入具体16进制数.

环境格式备注
URL%hex
XML,XHTML&#xhex
HTML,CSS#hex6位,用于表示颜色
UnicodeU+hex6位,表示字符编码
MIME=hex
Modula-2#hex
Smalltalk,AL GOL 6816rhex
Common Lisp#rhex或#16rhex
IPv68个hex用:分隔

十六进制的转换

十进制转十六进制

采用的余数定理分解

例:4877转换为16进制

4877/16=304…13

304/16=19…0

19/16=1…3

1/16=0…1

结果为:130D

C++实现十进制转换为k进制

#include <iostream>
using namespace std;

int main()
{
    char a[1000];
    int y = 0,k,n,x;
    char z='A';
    cin >> n >> x;
    while(n!=0)
    {
        y++;
        a[y]=n%x;
        n=n/x;
        if(a[y]>9)	a[y]+=z-10;
        else	a[y]+='0';
    }
    for(int i = y; i > 0; i--)
        cout << a[i];
    return 0;
}

C++实现m进制转换为十进制

#include <iostream>
#include<cstring>
using namespace std;
char a[10000];
int main()
{
    int n,m;
    int f=0;
    cin >> a >> m;
    for(int i=0;i<strlen(a);i++)
    {
        f*=m;
        if(a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='D'||a[i]=='E'||a[i]=='F')
            f+=(a[i]-'A'+10);
        else
            f+=(a[i]-'0');
    }
    cout << f;
    return 0;
}

部分内容来自于百度百科

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小徐学不会.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值