admin 管理员组

文章数量: 1184232


2024年12月21日发(作者:合并排序算法排序过程)

二、八、十、十六进制的使用及转换

的数表示,超过9的用字母A-F。

十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常生活中的表示法不一样。它

由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应10-15;N进制的数可以用0~(N-1)

基本简介:

十六进制(英文名称:Hexadecimal),是计算机中数据的一种表示方法。同我们日常

生活中的表示法不一样。它由0-9,A-F组成,字母不区分大小写。与10进制的对应关系是:0-9对应0-9;A-F对应

10-15;N进制的数可以用0~(N-1)的数表示,超过9的用字母A-F。

表示方法:

十六进制照样采用位置计数法,位权是16为底的幂。对于n位整数,m位小数的

十六进制数用加权系数的形式表示如下:

举例说明

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

10进制的32表示成16进制就是:20

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

取整",进行转换。

比如说十进制的转换成八进制为。就是乘以8=,不足1不取整,乘以8=,取整数6, 乘以8=,取整数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进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进

制转换的课程中,你可以发现这一点。

转换

二进制转换十进制

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

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

用横式计算: 0×2+0×2+1×2+0×2+0×2+1×2+1×2+0×2+1×2=356

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

1×2+1×2+1×2+1×2=356

4+32+64+256 =356

八进制转换十进制

八进制就是逢8进1。

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

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

所以,设有一个八进制数:1507,转换为十进制为:839,具体方法如下:

可以用横式直接计算: 7×8+0×8+5×8+1×8=839

也可以用竖式表示: 第0位 7×8^0=7

第1位 0×8^1=0

第2位 5×8^2=320

第3位 1×8^3=512

十六进制转换十进制

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开始)位上,如果是数β (β大于等于0,并且β小于等于 15,即:F)表示的大小为 β×16

的N次方。

假设有一个十六进数 2AF5

直接计算就是: 5×16+F×16+A×16+2×16=10997

也可以用竖式表示: 第0位: 5×16=5

第1位: F×16^1=240

第2位: A×16^2=2560

第3位: 2×16^3=8192

10997

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

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

1234 = 1×10+2×10+3×10+4×10

十六进制互相转换

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

你可能还要这样计算:1×2+1×2+1×2+1×2=1×1+1×2+1×4+1×8=15。

然而,由于1111才4位,所以我们必须直接记住它每一位的权值,并且是从高位往低位记,:8、4、2、1。

即,最高位的权值为2^3=8,然后依次是 2^2=4,2^1=2,2^0=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 + 0 + 2 + 1 = 11= B

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

1001 = 8 + 0 + 0 + 1 =9 =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 + 4 + 1,即:1101。

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

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

16进制,然后再转换成2进制。

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

们可以先除以16,得到16进制数:

被除数 计算过程 商 余数

1234 1234/16 77 2

77 77/16 4 13 (D)

4 4/16 0 4

结果16进制为:4D2

然后我们可直接写出4D2的二进制形式:

0100 1101 0010

其中对映关系为:

0100 -- 4

1101 -- D

0010 -- 2

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

将这个二进制转换成16进制,然后再转换为10进制。

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

01101101

00011011

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

十进制转十六进制

采余数定理分解,例如将487710转成十六进制:

487710÷14(E)

30481÷1

1905÷1

119÷7

7÷7

这样就计到487710(10)=7711E(16)

表达方法: 程序的表达方法环境 格式备注URL%hex无 XML,XHTML&#xhex无HTML,CSS#hex6位,表示颜

色UnicodeU+hex6位,表示字符编码MIME=hex无Modula-2#hex无Smalltalk,ALGOL 6816rhex无Common Lisp#xhex

或#16rhex无IPv68个hex用:分隔无

C C++的表达方法

如果不使用特殊的书写形式,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++并不把它当成一个负数。

在转义符中的使用

转义符也可以接一个16进制数来表示一个字符。如 '' 字符,可以有以下表达方式:

'' //直接输入字符

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

'0x3F' //用十六进制

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

各码转换:

结束了各种进制的转换,我们来谈谈另一个话题:原码、反码、补码。

我们已经知道计算机中,所有数据最终都是使用二进制数表达。

我们也已经学会如何将一个10进制数如何转换为二进制数。

不过,我们仍然没有学习一个负数如何用二进制表达。

比如,假设有一 int 类型的数,值为5,那么,我们知道它在计算机中表示为:5

00000000 00000000 00000000 00000101

转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

想知道,-5在计算机中如何表示吗

在计算机中,负数以其正值的补码形式表达。

什么叫补码呢这得从原码,反码说起。

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。

比如

00000000 00000000 00000000 00000101

是 5的 原码。

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:

00000000 00000000 00000000 00000101

每一位取反,得 。

称: 是

00000000 00000000 00000000 00000101

的反码。

反码是相互的,所以也可称:

00000000 00000000 00000000 00000101

互为反码。

补码:反码加1称为补码。

也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

比如:

00000000 00000000 00000000 00000101

的反码是:

那么,补码为:

+ 1 =

所以,-5 在计算机中表达为: 。转换为十六进制:0xFFFFFFFB。

再举一例,我们来看整数-1在计算机中如何表示。

假设这也是一个int类型,那么:

1、先取1的原码:

00000000 00000000 00000000 00000001

2、得反码:

3、得补码:

可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFFFF。

一切都是纸上说的……说-1在计算机里表达为0xFFFFFFFF,我能不能亲眼看一看呢当然可以。利用C++ Builder

的调试功能,我们可以看到每个变量的16进制值。

变量:

下面我们来动手完成一个小小的实验,通过调试,观察变量的值。

我们在代码中声明两个int 变量,并分别初始化为5和-5。然后我们通过CB提供的调试手段,可以查看到程

序运行时,这两个变量的十进制值和十六进制值。

首先写一个如下的C语言控制台程序:

设置断点:最常用的调试方法之一,使程序在运行时,暂停在某一代码位置,

在Code::Blocks中,设置断点的方法是在某一行代码上按F5或在行首栏内单击鼠标。

我们在return 0;这一行上设置断点。断点所在行将被Code::Blocks以红色显示。

接着,运行程序(F9),程序将在断点处停下来。

(请注意两张图的不同,前面的图是运行之前,后面这张是运行中,左边的箭头表示运行运行到哪一行)

当程序停在断点的时,我们可以观察当前代码片段内,可见的变量。观察变量的方法很多种,这里我们学习

使用 Debug Inspector (调试期检视),来全面观察一个变量。

以下是调出观察某一变量的 Debug Inspector 窗口的方法:

先确保代码窗口是活动窗口。(用鼠标点一下代码窗口)

按下Ctrl键,然后将鼠标挪到变量 aaaa 上面,你会发现代码中的aaaa变蓝,并且出现下划线,效果如网页

中的超链接,而鼠标也变成了小手状:

点击鼠标,将出现变量aaaa的检视窗口。从该窗口,我可以看到: aaaa :变量名 int :变量的数据类型

0012FF88:变量的内存地址,请参看 变量与内存地址;地址总是使用十六进制表达 5 :这是变量的值,

即 aaaa = 5;

0x00000005 :同样是变量的值,但采用16进制表示。因为是int类型,所以占用4字节。

首先先关闭前面的用于观察变量aaaa的Debug Inspector窗口。

然后,我们用同样的方法来观察变量bbbb,它的值为-5,负数在计算机中使用补码表示。

正如我们所想,-5的补码为:0xFFFFFFFB。

再按一次F9,程序将从断点继续运行,然后结束。

总结:

来看看我们主要学了什么:

1、我们学会了如何将二、八、十六进制数转换为十进制数。

三种转换方法是一样的,都是使用乘法。

2、我们学会了如何将十进制数转换为二、八、十六进制数。

方法也都一样,采用除法。

3、我们学会了如何快速的地互换二进制数和十六进制数。

要诀就在于对二进制数按四位一组地转换成十六进制数。

在学习十六进制数后,我们会在很多地方采用十六进制数来替代二进制数。

4、我们学习了原码、反码、补码。

把原码的0变1,1变0,就得到反码。要得到补码,则先得反码,然后加1。

以前我们只知道正整数在计算机里是如何表达,这时我们还知道负数在计算机里使用其绝对值的补码表达。

比如,-5在计算机中如何表达回答是:5的补码。

5、最后我们在上机实验中,这会了如何设置断点,如何调出Debug Inspector窗口观察变量。

以后我们会学到更多的调试方法。

标准表示: 在数制使用时,常将各种数制用简码来表示:如十进制数用D表示或省略;二进制用B来表

示;十六进制数用H来表示。

如:十制数123表示为:123D或者123;二进制数1011表示为:1011B;十六进制数3A4表示为:3A4H。

另外在编程中十六进制数也用"0x"作为开头。

快捷转换表格(0~100):

二进制

0

1

10

11

100

101

110

八进制

0

1

2

3

4

5

6

十进制

0

1

2

3

4

5

6

十六进制

0

1

2

3

4

5

6

111

1000

1001

1010

1011

1100

1101

1110

1111

10000

10001

10010

10011

10100

10101

10110

10111

11000

11001

11010

11011

11100

11101

11110

11111

100000

100001

100010

100011

100100

100101

100110

100111

101000

101001

7

10

11

12

13

14

15

16

17

20

21

22

23

24

25

26

27

30

31

32

33

34

35

36

37

40

41

42

43

44

45

46

47

50

51

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

7

8

9

A

B

C

D

E

F

10

11

12

13

14

15

16

17

18

19

1A

1B

1C

1D

1E

1F

20

21

22

23

24

25

26

27

28

29

101010

101011

101100

101101

101110

101111

110000

110001

110010

110011

110100

110101

110110

110111

111000

111001

111010

111011

111100

111101

111110

111111

1000000

1000001

1000010

1000011

1000100

1000101

1000110

1000111

1001000

1001001

1001010

1001011

1001100

52

53

54

55

56

57

60

61

62

63

64

65

66

67

70

71

72

73

74

75

76

77

100

101

102

103

104

105

106

107

110

111

112

113

114

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

2A

2B

2C

2D

2E

2F

30

31

32

33

34

35

36

37

38

39

3A

3B

3C

3D

3E

3F

40

41

42

43

44

45

46

47

48

49

4A

4B

4C

1001101

1001110

1001111

1010000

1010001

1010010

1010011

1010100

1010101

1010110

1010111

1011000

1011001

1011010

1011011

1011100

1011101

1011110

1011111

1100000

1100001

1100010

1100011

1100100

115

116

117

120

121

122

123

124

125

126

127

130

131

132

133

134

135

136

137

140

141

142

143

144

展开

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

4D

4E

4F

50

51

52

53

54

55

56

57

58

59

5A

5B

5C

5D

5E

5F

60

61

62

63

64

进位制的记数系统

二进制

六进制

十进制

基本进位制 十四进制

二十进制

三十进制

六十四进制

平衡进位制

特殊进位制

平衡三进制

Base64

平衡五进制

十进位制

平衡九进制

二进指数法 黄金进制

三进制

七进制

十一进制

十五进制

二十四进制

三十二进制

四进制

八进制

十二进制

十六进制

二十六进制

三十六进制

五进制

九进制

十三进制

十八进制

二十七进制

六十进制

相关条目

数学名词

八边形

半径

被加数

变量

不等边三角形

常量

除数

大于等于

等边三角形

定义域

多面体

二进制

反正割

分布

复数

函数

几何

假设

角度

九面体

空间

立方体

排列

平行

奇偶性

锐角

三次方程

斐波那契编码

记数系统

八面体

半球

被减数

标准差

不等式

垂心

代数

等式方程式

底面

对数

二次方程

二十面体

反正切

分母

公理

计算

阶乘

矩形

菱形

面积

旁心

平行六面体

锐角三角形

三次方根立方根

e进制

位元

百分比

半圆

表面积

不定积分

乘方

次方

单调性

等腰三角形

钝角

多项式

反余割

反正弦

分数

公式

横坐标

积分

减数

截尾

矩阵

棱台

命题

抛物线

平行四边形

曲线统计图

三次方立方

进位制

百分点

被乘数

比例

并集

乘数

次方根

单项式

等腰梯形

定积分

钝角三角形

二次方根平方根

反余切

方差

分子

勾股定理

极限

加权平均数

交集

进位

开方

棱柱

六边形

内切圆

平角

七边形

全等

三角

米迪定理

百分位数

被除数

补集

大于

导数

等于

定理

多边形

二次方平方

反余弦

非正态分布

轨迹

弧度

集合

加数

九边形

空集

棱锥

六面体

内心

平均数

七面体

三角形

扇形

十边形

十面体

数列级数

四次方程

梯形

图表

微分

无穷小

下舍入

相位

斜边

映射

余弦

圆心

运算

正态分布

直角三角形

重心

组合

扇形统计图

十二边形

十一边形

数字

四次方根

图象

微积分

无效数字

线

小数

行列式

有理数

元素

圆周

运算符

正多边形

正弦

直角梯形

周长

柱形统计图

坐标系

十二面体

十一面体

双曲线

四面体

体积

椭圆

未知数

五边形

线段

小数点

虚数

有效数字

原点

圆周率

折线统计图

正方形

证明

直径

周角

子集

坐标轴

上舍入

十进制

实数

四边形

四舍五入

条形统计图

外切圆

无理数

五面体

相交

小于

旋转

余割

圆柱

振幅

正割

直角

值域

周期

自然数

射线

十六进制

四次方

算术

统计

外心

无穷大

系数

相似

小于等于

一次方程

余切

圆台

圆锥

整数

正切

直角边

指数幂

周期性

纵坐标


本文标签: 进制 二进制 表示 变量 表达