跳至正文
View Categories

1 min read

主要内容 #

1.十六进制和十进制转换 #

首先,还是在,十进制数中,我们有这样的约定:

千    百    十    个
1     2     3    4

现在我们来看一下,十六进制该怎么转化。

1.1 十六进制 to 十进制 #

在之前的课程中,我们已经介绍过了。这里复习一下。
假设有一个十六进制,

5AF1

然后我们可以这样约定,在十六进制中:(* 大师码老师,请根据情况,适当补充指数等相关知识。)

(16^3)    (16^2)    (16^1)    (16^0)
5          A         F        1

如何计算它的十进制值呢?

从个位开始:
(16^0): 1 * (16^0) = 1 * 1 = 1
(16^1): F * (16^1) = 15 * 16 = 240
(16^2): A * (16^2) = 10 * 16*16 = 2560
(16^3): 5 * (16^3) = 5 * 16*16*16 = 20480

所以,总和为:20480 + 2560 + 240 + 1 = 23281

请计算下面几个十六进制数的十进制值是多少。
注意,请写出计算过程。

FFFF
FF00
10
100
1000
ABCD

答案:

65535
255
16
256
4096
43981

3.2 十进制 to 十六进制 #

需要使用“倒除法”,被除数是 16
假设有一个十进制数:23281

   
  _1455__
16)23281     // 商 1455 ,余数 1
   23280
---------
       1


取上一步计算得到的“商”,继续做除法。

  ___90_
16)1455     // 商 90 ,余数 15 (F)
   1440
---------
     15


取上一步计算得到的“商”,继续做除法。

  __5__
16)90     // 商 5 ,余数 10(A)
   80
---------
   10


不能再除。

先写最后一步的“商”
然后,倒着将所有余数写出来。(先写最底下的余数)

5AF1

这个方法,请多加练习。

2. 二进制和十六进制转换 #

二进制对于编程来说,是非常重要的。虽然我们还没有具体介绍原因,但是已经无数次的再强调了。

不过,二进制有一个显而易见的缺点,那就是太长长长。。。

1000      // 十进制 8
1111 1111 // 十进制 255

但是二进制太重要了,我们不能不使用它。所以,我们为了表示方便,就经常使用十六进制。

原因也是非常显而易见的,我们这儿,举几个例子,大家以看就明白了。

0001                 // 十六进制 1
0010                 // 十六进制 2
0100                 // 十六进制 4
1000                 // 十六进制 8
1111                 // 十六进制 F
1111 1111            // 十六进制 FF
1111 1111 0000 0001  // 十六进制 FF01

因为二进制对程序而言非常重要,而十六进制沾了二进制的光,所以在编程中,也应用广泛。

  • 4 位二进制,正好对应 1 位十六进制

2.1 二进制 to 十六进制 #

一般来说,我们可以通过十进制数作为媒介,完成它们之间的互转。

2.2 十六进制 to 二进制 #

一般来说,我们可以通过十进制数作为媒介,完成它们之间的互转。

在这里,请大家一定要记住:

1111                 // 十六进制 F

这是非常重要的,要记得非常牢。

3. 二进制,八进制和十六进制,在 C++ 中的写法 #

虽然我们一直说,二进制很重要,但是

  • C++ 中,没有二进制数的直接表示方法!!!
  • 二进制数,是通过十六进制数,表示的!

请看代码:

int dashima;
dashima = 0xFF01;  // 将 dashima 赋值为 0xFF01,这是十六进制数
dashima = 0x1;     // 以 0x 开始,表示为十六进制
dashima = 0x0011;  // 可以以 0 开头

dashima = 23281;   // 将 dashima 赋值为 23281,这是十进制数

dashima = o1;      // 将 dashima 赋值为 01,这是八进制数
dashima = o452;    // 以 o 开始,表示为八进制。注意,这是字母 o,不是数字 0
dashima = o77;
  • 0x 是十六进制数的开头。x 也可以大写,一般习惯小习。
  • o 是八进制数的开头。注意,这不是数字0,这是字母o,也可以大写。
  • C++ 中,十六进制的负数,非常特殊。不可以写作 -0xFF ,要使用反码,我们将在后面的课程中介绍。

习题 #

请练习一下,完成下面转化。注意书写计算过程。

1111(2进制)  ==>   0x????
1100(2进制)  ==>   0x????

1111 1100(2进制)  ==>   0x????
1001 1101(2进制)  ==>   0x????

0x0077  ==> ????(2进制)
0x00e8  ==> ????(2进制)      // C++ 的十六进制写法中,不区分字母的大小写
0x7a5d  ==> ????(2进制)

答案:

课堂练习答案见页面最下方

课后练习

– /wp:paragraph –>

0x00e8 ==> 1110 1000

0x7a5d ==> 0111 1010 0101 1101