二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。

19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。

二进制数据的表示法

二进制数据也是采用位置进制就是:20

16进制的20表示成10进制就是:2×16¹+0×16º=32

十进制数可以转换成十六进制数的方法是:十进制数的整数部分“除16取余”,十进制数的小数部分“乘16取整”,进行转换。

比如说十进制的0.1转换成八进制为0.0631463146314631。就是0.1乘以8=0.8,不足1不取整, 0.8乘以8=6.4,取整数6 , 0.4乘以8=3.2,取整数3,依次下算。

编程中,我们常用的还是10进制.毕竟C/C++是高级语言。

比如

int a = 100,b = 99;

不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决  问题。但二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:

0000

0000

0000

0000

0110

0100

面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。用16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?2、8、16,分别是2的1次方、3次方、4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。

使用十六进制的意义是:

1 用于计算机领域的一种重要的数制。

2 对计算机理论的描述,计算机硬件电路的设计都是很有益的。比如逻辑电路设计中,既要考虑功能的完备,还要考虑用尽可能少的硬件,十六进制就能起到一些理论分析的作用。比如四位二进制电路,最多就是十六种状态,也就是一种十六进制形式,只有这十六种状态都被用上了或者尽可能多的被用上,硬件资源才发挥了尽可能大的作用。

3 十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数。

进制转换

1、二进制转十进制

方法:“按权展开求和”

比如:

规律:个位上的数字的次数是0,十位上的数字的次数是1,......,依次递增,而十

分位的数字的次数是-1,百分位上数字的次数是-2,......,依次递减。

注意:不是任何一个十进制小数都能转换成有限位的二进制数。

2、十进制转二进制

· 十进制整数转二进制数:“除以2取余,逆序排列”(除二取余法

比如:

89÷2 ……1

44÷2 ……0

22÷2 ……0

11÷2 ……1

5÷2 ……1

2÷2 ……0

1

十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)

比如:

(0.625)10= (0.101)2

0.625X2=1.25 ……1

0.25 X2=0.50 ……0

0.50 X2=1.00 ……1

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

二进制数转换成十六进制数时,只要从小数点位置开始,向左或向右每四位二进制划分一组(不足四位数可补0),然后写出每一组二进制数所对应的十六进制数码即可。

十六进制数转换成二进制数:把每一个十六进制数转换成4位的二进制数,就得到一个二进制数。

十六进制数字与二进制数字的对应关系如下:

0000 -> 0 0100 -> 4 1000 ->8 1100 -> C

0001 -> 1 0101 -> 5 1001 ->9 1101 -> D

0010 -> 2 0110 -> 6 1010 ->A 1110 -> E

0011 -> 3 0111 -> 7 1011 ->B 1111 -> F

比如:将十六进制数5DF.9 转换成二进制:

5 D F . 9

0101 1101 1111 .1001

即:(5DF.9)16 =(10111011111.1001)2{十六进制怎么会有小数点}

比如:将二进制数1100001.111 转换成十六进制:

0110 0001 . 1110

6 1 . E

即:(1100001.111)2 =(61.E)16

4、二进制数转换成八进制数:从小数点开始,整数部分向左、小数部分向右,每3位为一组用一位八进制数的数字表示,不足3位的要用“0”补足3位,就得到一个八进制数。

八进制数转换成二进制数:把每一个八进制数转换成3位的二进制数,就得到一个二进制数。

八进制数字与二进制数字对应关系如下:

000 -> 0 | 100 -> 4

001 -> 1 | 101 -> 5

010 -> 2 | 110 -> 6

011 -> 3 | 111 -> 7

比如:将八进制的37.416转换成二进制数:

3 7 . 4 1 6

011 111 .100 001 110

即:(37.416)8 =(11111.10000111)2

比如:将二进制的10110.0011 转换成八进制:

0 1 0 1 1 0 . 0 0 1 1 0 0

2 6 . 1 4

即:(10110.0011)2 = (26.14)8

二进制与八进制的互相转换和二进制与十六进制的转换类似,区别在于需要操作的是三位一组而不是四位。

二进制/八进制换算表

二进制

八进制

000

0

001

1

010

2

011

3

100

4

101

5

110

6

111

7

为了将一个二进制数换算为八进制,只需将二进制串划分成每三个位一组(如果需要的话,在前面补零),然后查表2-2,将三位一组的位串替换为相应的八进制数字即可。

5、八进制数换算为十六进制

只需将八进制数换算为二进制,然后再换算为十六进制即可。

一种计数法,采用0,1,2,3,4,5,6,7八个数码,逢八进位,并且开头一定要以数字0开头。八进制的数较二进制的数书写方便,常应用在电子计算机的计算中。

例如:

10进制的32表示成8进制就是:040

10进制的9,27在八进制中分别记位011,033.

6、八进制化为十进制:

八进制数12.6转换成十进制数

(12.6)8 = 1×8^1 + 2×8^0 + 6×8^-1 = (10.75)10

7、八进制化为二进制:

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

比如:(17.36)8 = (001 111 .011 110)2 = (1111.01111)2

八进制化为十六进制

先将八进制化为二进制,再将二进制化为十六进制

例:(712)8 = (1110 0101 0)2 = (1CA)16

8、十六进制化为八进制:

先用1化4方法,将十六进制化为二进制;再用3并1方法,将二进制化为8制。

例: (1CA)16 = (111001010)2 = (712)8

说明:小数点前的高位零和小数点后的低位零可以去除。

9、十进制化八进制

方法1:采用除8取余法。

例:将十进制数115转化为八进制数

8| 115…… 3

8| 14 …… 6

8| 1 …… 1

结果:(115)10 = (163)8

方法2:先采用十进制化二进制的方法,再将二进制数化为八进制数

比如:(115)10 = (1110011)2 = (163)8

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

直接计算就是:

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

也可以用竖式表示:

第0位: 5×160=5

第1位: F×16^1=240

第2位: A×162=2560

第3位: 2×163=8192

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

10997

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

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

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

C语言的本质(2)——二进制、八进制、十六进制与十进制的更多相关文章

  1. C# 进制转换(二进制、十六进制、十进制互转)

    原文地址:https://www.cnblogs.com/icebutterfly/p/8884023.html C# 进制转换(二进制.十六进制.十进制互转)由于二进制数在C#中无法直接表示,所以所 ...

  2. C# 进制转换(二进制、十六进制、十进制互转) 转载 https://www.cnblogs.com/icebutterfly/p/8884023.html

    C# 进制转换(二进制.十六进制.十进制互转)由于二进制数在C#中无法直接表示,所以所有二进制数都用一个字符串来表示例如: 二进制: 1010 表示为 字符串:"1010" int ...

  3. [No000071]C# 进制转换(二进制、十六进制、十进制互转)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  4. python的进制转换二进制,八进制,十六进制及其原理

    #!usr/bin/env python# coding:utf-8def binary(): '''二进制的方法与算法'''    Number = 10    Number1 = 20    Nu ...

  5. java中 二进制 八进制 十六进制 十进制 相互转换 最简方法

    package com.swift; import java.util.Scanner; public class Hex2Decimal { public static void main(Stri ...

  6. Java十进制转成二进制 八进制 十六进制

    int a = 357;//十进制转成二进制System.out.println(Integer.toBinaryString(a)); package com.swift; import java. ...

  7. 二进制&八进制&十六进制之间的快速转换------ 心算&笔算方法总结

    二进制数                   0&1两种元素: 8进制数                   0-7 八种元素: 十六进制数            0-9,a,b,c,d,e, ...

  8. Python 进制转换 二进制 八进制 十进制 十六进制

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义一定不 ...

  9. Python进制转换(二进制/八进制/十进制/十六进制)

    Python 进制转换 二进制 八进制 十进制 十六进制 作者:方倍工作室 地址:http://www.cnblogs.com/txw1958/p/python3-scale.html 全局定义 ba ...

随机推荐

  1. [汇编语言]-第二章寄存器(CPU工作原理)

    1- 对于汇编程序员来说,CPU中主要的部件是寄存器,这些寄存器是:AX BX CX DX SI DI SP BP IP CS SS DS ES PSW. 2- 8086CPU所有寄存器都是16位的, ...

  2. SQL中 and or优先级问题(转)

    刚刚在项目中遇到这样一个问题,SQL语句如下: select * from LOAN_BACK_LIBRARY where LIBRARY_ID=1 or LIB_ID=1 and STATUS=3 ...

  3. jsp 2种include标签的区别

    众所周知,jsp中有2种标签用于包含其他jsp或者文件 1.include指令,其实是java代码 <%@ include file="xxx.jsp"%> 2.jsp ...

  4. Android网络编程概述

    Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包 ...

  5. mysql数据损坏修复方法

    1.myisamchk使用 myisamchk 必须暂时停止 MySQL 服务器.例如,我们要检修 discuz 数据库.执行以下操作:# service mysql stop (停止 MySQL ) ...

  6. cf459C Pashmak and Buses

    C. Pashmak and Buses time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. 安装oracle客户端(navicat for oracle)

    本文使用Navicat for Oracle工具连接oracle 安装的过程我就不在此赘述,跟一般软件的安装过程类似.下面主要讲解Navicat的配置. 1.启动该工具,出现如下的开始界面,单击“连接 ...

  8. EF框架+Lamada表达式(联合多表lamada表达式的用法)

    有俩张表对应的EF框架的类Reviews和Commodity_Review,新建一个新的类,字段是联合俩张表后自己需要展示的字段ReviewsShow IQueryable<ReviewsSho ...

  9. react-native 自己搭建热更新服务器

    使用到的框架是 react-native-update react-native-update-cli 这个应该执行热更新的时候的终端命令. 通过这个,自己搭建一个热更新的服务器.

  10. Windows 应用程序结构

    Windows 应用程序结构