八、十六进制数转换到十进制数

【SystemVerilog项目实践】4.AHB-SRAMC(验证计划) 验证计划 阅读详情

二、八、十六进制数转换到十进制数

关键词二、八、十六进制数转换到十进制                                          

 

6.2.1 二进制数转换为十进制数

二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……

所以,设有一个二进制数:0110 0100,转换为10进制为:

下面是竖式:

 

0110 0100 换算成 十进制

 

第0位 0 * 20  =  0

第1位 0 * 21  =  0

第2位 1 * 22  =  4

第3位 0 * 23  =  0

第4位 0 * 24  =  0

第5位 1 * 25  = 32

第6位 1 * 26  = 64

第7位 0 * 27  =  0     +

---------------------------

              100  

 

用横式计算为:

0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100

 

0乘以多少都是0,所以我们也可以直接跳过值为0的位:

1 * 22 + 1 * 23 +  1 * 25 + 1 * 26 = 100

 

6.2.2 八进制数转换为十进制数

八进制就是逢8进1。

八进制数采用 0~7这八数来表达一个数。

八进制数第0位的权值为8的0次方,第1位权值为8的1次方,第2位权值为8的2次方……

所以,设有一个八进制数:1507,转换为十进制为:

用竖式表示:

 

1507换算成十进制。

 

第0位 7 * 80 = 7

第1位 0 * 81 = 0

第2位 5 * 82 = 320

第3位 1 * 83 = 512   +

--------------------------

              839

同样,我们也可以用横式直接计算:

7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839

 

结果是,八进制数 1507 转换成十进制数为 839

 

6.2.3 八进制数的表达方法

C,C++语言中,如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。

所以,C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。这就是八进制数在C、C++中的表达方法。

由于C和C++都没有提供二进制数的表达方法,所以,这里所学的八进制是我们学习的,CtC++语言的数值表达的第二种进制法。

现在,对于同样一个数,比如是100,我们在代码中可以用平常的10进制表达,例如在变量初始化时:

 

int a = 100;

我们也可以这样写:

int a = 0144; //0144是八进制的100;一个10进制数如何转成8进制,我们后面会学到。

 

千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的“转义符”表达法。

 

6.2.4 八进制数在转义符中的使用

我们学过用一个转义符'/'加上一个特殊字母来表示某个字符的方法,如:'/n'表示换行(line),而'/t'表示Tab字符,'/''则表示单引号。今天我们又学习了一种使用转义符的方法:转义符'/'后面接一个八进制数,用于表示ASCII码等于该值的字符。

比如,查一下第5章中的ASCII码表,我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '/77'来表示'?'。由于是八进制,所以本应写成 '/077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。

事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。

 

6.2.5 十六进制数转换成十进制数

2进制,用两个阿拉伯数字:0、1;

8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;

10进制,用十个阿拉伯数字:0到9;

16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?

 

16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。

十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……

所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。

假设有一个十六进数 2AF5, 那么如何换算成10进制呢?

 

用竖式计算:

 

2AF5换算成10进制:

 

第0位:  5 * 160 = 5

第1位:  F * 161 = 240

第2位:  A * 162 = 2560

第3位:  2 * 163 = 8192  +

-------------------------------------

                 10997 

直接计算就是:

5 * 160  + F * 161 + A * 162 + 2 * 163 = 10997

(别忘了,在上面的计算中,A表示10,而F表示15)

 

现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。

假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一个算式:

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

 

6.2.6  十六进制数的表达方法

如果不使用特殊的书写形式,16进制数也会和10进制相混。随便一个数:9876,就看不出它是16进制或10进制。

C,C++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O)

以下是一些用法示例:

 

int a = 0x100F;

int b = 0x70 + a;

 

至此,我们学完了所有进制:10进制,8进制,16进制数的表达方式。最后一点很重要,C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;但8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。

 

6.2.7 十六进制数在转义符中的使用

 

转义符也可以接一个16进制数来表示一个字符。如在6.2.4小节中说的 '?' 字符,可以有以下表达方式:

 

'?'     //直接输入字符

'/77'   //用八进制,此时可以省略开头的0

'/0x3F' //用十六进制

 

同样,这一小节只用于了解。除了空字符用八进制数 '/0' 表示以外,我们很少用后两种方法表示一个字符。

 

6.3 十进制数转换到二、八、十六进制数

6.3.1 10进制数转换为2进制数

 

给你一个十进制,比如:6,如果将它转换成二进制数呢?

 

10进制数转换成二进制数,这是一个连续除2的过程:

把要转换的数,除以2,得到商和余数,

将商继续除以2,直到商为0。最后将所有余数倒序排列,得到数就是转换结果。

 

听起来有些糊涂?我们结合例子来说明。比如要转换6为二进制数。

 

“把要转换的数,除以2,得到商和余数”。

 那么:

 要转换的数是6, 6 ÷ 2,得到商是3,余数是0。 (不要告诉我你不会计算6÷3!)

 

“将商继续除以2,直到商为0……”

现在商是3,还不是0,所以继续除以2。

那就: 3 ÷ 2, 得到商是1,余数是1

 

“将商继续除以2,直到商为0……”

现在商是1,还不是0,所以继续除以2。

那就: 1 ÷ 2, 得到商是0,余数是1 (拿笔纸算一下,1÷2是不是商0余1!)

 

“将商继续除以2,直到商为0……最后将所有余数倒序排列”

好极!现在商已经是0。

我们三次计算依次得到余数分别是:0、1、1,将所有余数倒序排列,那就是:110了!

 

6转换成二进制,结果是110。

 

把上面的一段改成用表格来表示,则为:

被除数计算过程余数
66/230
33/211
11/201

(在计算机中,÷用 / 来表示)

 

如果是在考试时,我们要画这样表还是有点费时间,所更常见的换算过程是使用下图的连除:

(图:1)

请大家对照图,表,及文字说明,并且自已拿笔计算一遍如何将6转换为二进制数。

说了半天,我们的转换结果对吗?二进制数110是6吗?你已经学会如何将二进制数转换成10进制数了,所以请现在就计算一下110换成10进制是否就是6。

 

6.3.2 10进制数转换为8、16进制数

 

非常开心,10进制数转换成8进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8。

 

来看一个例子,如何将十进制数120转换成八进制数。

 

用表格表示:

被除数计算过程余数
120120/8150
1515/817
11/801

 

120转换为8进制,结果为:170。

 

非常非常开心,10进制数转换成16进制的方法,和转换为2进制的方法类似,惟一变化:除数由2变成16。

 

同样是120,转换成16进制则为:

被除数计算过程余数
120120/1678
77/1607

 

120转换为16进制,结果为:78。

 

请拿笔纸,采用(图:1)的形式,演算上面两个表的过程。

 

6.4 二、十六进制数互相转换

 

二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

我们也一样,只要学完这一小节,就能做到。

首先我们来看一个二进制数:1111,它是多少呢?

你可能还要这样计算:1 * 20 + 1 * 21 + 1 * 22 + 1 * 23 = 1 * 1 + 1 * 2 + 1 * 4 + 1 * 8 = 15。

然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。即,最高位的权值为23 = 8,然后依次是 22 = 4,21=2, 20 = 1。

 

记住8421,对于任意一个4位的二进制数,我们都可以很快算出它对应的10进制值。

 

下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)

 

仅4位的2进制数  快速计算方法   十进制值     十六进值

1111        = 8 + 4 + 2 + 1  = 15          F

1110        = 8 + 4 + 2 + 0  = 14          E

1101        = 8 + 4 + 0 + 1  = 13          D          

1100        = 8 + 4 + 0 + 0  = 12          C          

1011        = 8 + 4 + 0 + 1  = 11          B          

1010        = 8 + 0 + 2 + 0  = 10          A

1001        = 8 + 0 + 0 + 1  = 10          9

....

0001        = 0 + 0 + 0 + 1  = 1           1

0000        = 0 + 0 + 0 + 0  = 0           0

 

二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。

如(上行为二制数,下面为对应的十六进制):

 

1111 1101 , 1010 0101 , 1001 1011

 F    D   ,  A    5   ,  9    B  

 

反过来,当我们看到 FD时,如何迅速将它转换为二进制数呢?

先转换F:

看到F,我们需知道它是15(可能你还不熟悉A~F这五个数),然后15如何用8421凑呢?应该是8 + 4 + 2 + 1,所以四位全为1 :1111。

接着转换 D:

看到D,知道它是13,13如何用8421凑呢?应该是:8 + 2 + 1,即:1011。

所以,FD转换为二进制数,为: 1111 1011

 

由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。

比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数:

被除数计算过程余数
12341234/16772
7777/16413 (D)
44/1604

 

结果16进制为: 0x4D2

 

然后我们可直接写出0x4D2的二进制形式: 0100 1011 0010。

其中对映关系为:

0100 -- 4

1011 -- D

0010 -- 2

 

同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。

下面举例一个int类型的二进制数:

01101101 11100101 10101111 00011011

我们按四位一组转换为16进制: 6D E5 AF 1B

 
进制转换程序:十进制与二进制进制十六进制相互转换 在计算机科学中,进制转换是一项常见的任务。进制是一种表示字的方式,常见的进制包括十进制、二进制进制十六进制。本文将介绍如何编写一个程序,用于在这些进制之间进行相互转换。我们将使用Python编程语言来实现这个程序。Python是一种简单易学的高级编程语言,非常适合用于编写此类小型工具。通过实现上述函,我们可以在十进制、二进制进制十六进制之间进行相互转换。这些转换可以帮助我们在计算机科学中处理不同进制值表示。 阅读详情

相关推荐

windows 配置 libxml2

路径:\libiconv-1.9.2-1-src.zip\src\libiconv\1.9.2\libiconv-1.9.2\include\。执行完后,在当前win32目录中会生成了一个bin.msvc目录,其中就有开发需要的libxml2.lib和libxml2.dll文件。将 libiconv.la 复制到 新建的 lib 目录,并将其改名为 iconv.lib。路径:libiconv-1.9.2-1-bin.zip\lib\。将如下的 iconv.h 复制到新建的 include 目录。

SHELLCODE_8BIT的博客 3848

十六进制8)转十进制

#include #include int main() { char a[10]; long long sum=0; int i,j; scanf("%s",a); for(i=0;i<strlen(a);i++) { if(a[i]>='A' && a[i]<='F') sum=sum*16+a[i]-'A'+10; else if(a[i]

L-75的专栏 3571

stm32十六进制字符串转十进制数值代码

STM32十六进制字符串转十进制数值STM32十六进制字符串转十进制数值STM32十六进制字符串转十进制数

进制转换内容总结

今天接触了进制转换的内容,即十进制,二进制进制十六进制之间的相互转换。 一、基础内容 十进制:有十个基 0,1,2,3,4,5,6,7,8,9 二进制:逢二进一,借一为二。 基为0,1 进制:逢进一,借一为。 基为0,1,2,3,4,5,6,7 十六进制:逢十六进一,借一为十六。 基为0,1,2...

weixin_34375233的博客 873

一看就懂二进制进制十六进制转换进制

进制转换成十进制示例( 0-1 ) 任何的0次方代表1,任何的1次方是他本身 规则:从最低开始,将每个上的提取出来,乘以2的(-1)次方。然后求和。 案例1:将二进制1011转成十进制 1011 = 1*2^0+1*2^1+0*2^2+1*2^3= 1+2+0+8=11 案例2:将二进制110001100转成十进制 110001100=0*2^0+0*2^1+1*2^2+1*2^3+0*2^4+0*2^5+0*2^6+1*2^7+1*2^8= 0+0+4+8+.

新一技术 2196

STM32串口接收十六进制转为十进制数(包含负

STM32串口接收十六进制转为十进制数(包含负

qq_46226356的博客 6727

二,十六进制转换十进制数

进制转换十进制数进制第0的权值是2的0次方,第1的权值是2的1次方……所以,设有一个二进制:0110 0100,转换10进制为:下面是竖式: 0110 0100 换算成 十进制 第0 0 * 20 = 0第1 0 * 21 = 0第2 1 * 22 = 4第3 0 * 23 = 0第4 0 * 24 = 0第5 1 *

hailongge的专栏 5221

转换】-十进制数转换十六进制

部分:除8取余法;除16取余法小部分:乘8取整法;乘16取整法

zhaizhai的博客 524

进制之间的转换

进制之间的转换

Snake_____的博客 342

计算机中常见的进制转换

进制就是几,如二进制的基是2、进制的基8十六进制的基16。小点右侧第一为-1号,第二为-2号,第三为-3号。小点左侧第一为0号,第二为1号,第三为2号。一个,它的每所对应的权重。十进制数123.456中,

muyuxifeng的博客 811

进制进制十六进制

进制进制十六进制 6.1 为什么需要进制十六进制? 6.2 二、十六进制转换十进制数   6.2.1 二进制转换十进制数   6.2.2 进制转换十进制数   6.2.3 进制的表达方法   6.2.4 进制在转义符中的使用   6.2.5

cabinriver的专栏 1514

R6-3 用链栈实现将非负的十进制数转换为指定的进制【有题解视频,可本地编译器调试】

/ 据域// 指向后继结点的指针域函说明:形参--sdecscale,其中,s是存放转换后的scale进制的各字,dec主函输入的待转换十进制数,scale是指定的制(只能是2、816)。1,表示函执行完成;0,表示函未成功执行。

2303_79734054的博客 997

【软考】按IEEE754规则规格化单精度浮点

备考软考初级程序员证书时,卡在单精度浮点规格化问题,教程及网络资料讲解过于专业化,故搜集资料后自行整理了解题过程,在此做个记录,希望能帮到各,有问题欢迎评论区指出。利用IEEE 754标准将/十/十六进制表示为单精度浮点。参考资料:规格化浮点-百度百科...

YGいくこさん的博客 4316

怎么使用计算机二进制,在计算机中为什么使用二进制

1 在计算机中为什么使用二进制在计算机中,广泛采用的是只有"0"和"1"两个基本符号组成的二进制,而不使用人们习惯的十进制数,原因如下:(1)二进制在物理上最容易实现。例如,可以只用高、低两个电平表示"1"和"0",也可以用脉冲的有无或者脉冲的正负极性表示它们。(2)二进制用来表示的二进制的编码、计、加减运算规则简单。(3)二进制的两个符号"1"和"0"正好与逻辑命题的两个值"是"和...

weixin_42522275的博客 1976

进制转换总结

一)、制 计算机中采用的是二进制,因为二进制具有运算简单,易实现且可靠,为逻辑设计提供了有利的途径、节省设备等优点,为了便于描述,又常用十六进制作为二进制的缩写。 一般计都采用进,其特点是: (1)逢N进一,N是每种进制表示一所需要的符号目为基。 (2)采用置表示法,处在不同置的字所代表的值不同,而在固定置上单字表示的值是确定的,这个固定上的值称为权。...

weixin_34310785的博客 259

二、、十、十六进制之间的转换

进制进制、十进制十六进制之间的转换 进制也就是进制,对于接触过电脑的人来说应该都不陌生,我们常用的进制包括:二进制进制、十进制十六进制,它们之间区别在于运算时是逢几进一。比如二进制是逢2进一,十进制也就是我们常用的0-9是逢10进一。具体的用法今天不着重解释,主要针对他们之间的转换加以讨论: 二进制与十进制之间的转换 一、十进制转二进制 方法为:十进制数除2取余法,即十进制数除2,余为权上的,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。 (具体用法如下图)

qq_47897078的博客 5569

十进制数转换成二、十六进制

在算法练习时,经常碰到进制转换的问题,这些问题大同小异,这里就简单的写个程序方便自己复用进制转换算法。 #include<iostream> #include<string> using namespace std; //num是需要是转换字,form是要目标进制 string trans(int num,int form) { string str; while...

qq_42880512的博客 722

十进制数与二进制进制十六进制之间的转换

原理介绍: 1.十进制转换为二进制   整部分:按“倒序除2取余法”的原则进行转换。   即用2连续去除十进制数,直至商等于0为止,逆序排列余即可得到与该十进制相对应的二进制值。

iBelie的专栏 965

进制转换:十进制转二进制十六进制转二进制、二进制进制

一、十进制转其它进制(除基取余法) 二、十进制转其它进制(乘基取整法) 三、十六进制转二进制 四、进制转二进制

m0_56602092的博客 4840

Python程序将十进制转换为二进制进制十六进制

Here you will get python program to convert decimal to binary, octal and hexadecimal. 在这里,您将获得将十进制转换为二进制进制十六进制的python程序。 Python provides inbuilt functions for conversion of one number system to a...

culing2941的博客 1万+

最优化算法/工程优化课后习题1到4章答案_工程优化 最优化计算方法

最优化算法/工程优化 陈开周版课后习题1到4章答案

上一篇: 十进制与二进制八进制十六进制的转换
下一篇: 十大招彻底解决无线AP故障
cjwid
博客等级 码龄19年 19粉丝 5原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值