主要内容 #
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