补码进制转换详解 , 补码详解 ,进制转换详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成 2 进制数时,也可以 先转换成 16 进制,然后再转换成 2 进制。 比如,十进制数 1234 转换成二制数,如果要一直除以 2,直接得到 2 进制数,需要计算较多次数。 所以我们可以先除以 16,得到 16 进制数:
被除数 计算过程 商
记住 8421,对于任意一个 4 位的二进制数,我们都可以很快算出它对应的 10 进制值。
下面列出四位二进制数 xxxx 所有可能的值(中间略过部分)
仅 4 位的 2 进制数 快速计算方法 十进制值
1111 = 8 + 4 + 2 + 1 = 15
F
1110 = 8 + 4 + 2 + 0 = 14
逻辑判断 用&或者&&做比较时,好像是一个效果啊 false & false 结果是 false
true & true 结果是 true
false && false true && true
结果是 false 结果是 true
其实他们之间有一个很大的差别:短路 举个例子来解释一下吧, false &true-->false false&&true-->false 单从结果上看,他们结果是一样的,都是 false 但是前者在运行的时候,计算机首先判断第一个条件为 false,然后判断第二个条件 true,然后判断 出结果为 false 而后者,首先也是判断第一个条件,当判断出为 false 时,程序立即终止,因为不管第二个条件是 什么,结果一定为 false
1000……………………01 (原码)负数的反码转换为原码 1000……………………01 原码
1<<2 =2 0000……………………01 补码 0000…………………100 算术左移两位(符号位不变,低位补 0) -1<<2 = -2 1000……………………01 -1 的原码 1111……………………10 -1 的反码 1111……………………11 -1 补码 1111………………… 100 (补码)算术左移两位(符号位不变,低位补 0) 1000………………… 011 (反码)负数的补码转换为反码 1000………………… 100 (原码)负数的反码转换为原码 1000………………… 100 原码
10997 直接计算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997
6 转换成二进制,结果是 110。
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。
0. 5000
×
2
1. 0000 …… 整数部分为 1
Байду номын сангаас
即:(0.6875)10 = (0.1011)2
(256.73)10=2×102+5×101+6×100+7×10-1+3×10-2 =200+50+6+0.7+0.03 =256.73
(205)8=2×82+0×81+5×80 =128+0+3 =(133)10
[例] 十进制数 7155.625 对应的十六进制数是什么?
解:
16 7155
余数 3
16
447
余数 15(F)
16
27
余数 11(B)
16
1
余数 1
0
则,(7155)10=(1BF3)16
0.625
× 16
10.000
整数部分 10(A)
则,(0.625)10=(0.A)16
(7155.625)10=(1BF3.A)16
3>>>2 =0 0000…………………0011 3(补码=原码) 0000…………………0000 (补码)低位溢出,高位补 0
十进制数
(1098)10=1×103+0×102+9×101+8×100 (2C.4B)16=2×161+C×160+4×16-1+B×16-2 (101.11)2=1×22+0×21+1×20+1×2-1+1×2-2
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-2=1+(-2)= -1 在计算机中 :补码+补码=补码
0000……………………………………1 + 1111 …………………………………10 = 1111………………………………… 11
补码 补码 补码
假设有一个十六进数 2AF5, 那么如何换算成 10 进制呢? 用竖式计算: 2AF5 换算成 10 进制: 第 0 位: 5 * 16^0 = 5 第 1 位: F * 16^1 = 240 第 2 位: A * 16^2 = 2560 第 3 位: 2 * 16^3 = 8192 + ————————————-
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 位一段,分别转换为十六进制。
如(上行为二制数,下面为对应的十六进制):
位运算符 ~2= -3 2 的补码取反 000……………………10 原码=补码 1111……………………01 取反后是一个负数的补码
一个负数的反码
1111……………………01 - 0000……………………01 =1111……………………00 一个负数的反码 一个负数的原码 = 一个负数的反码符号位不变(0-->1;1-->0) 1111……………………00 1000…………………011 一个负数的原码
将十进制数 3929 转换成二进制数。
解:
8
3929
8
491
8
61
8
7
0
则(3929)10=(7531)8
余数 1 余数 3
余数 5 余数 7
假设有一个十六进数 2AF5, 那么如何换算成 10 进制呢? 用竖式计算:
2AF5 换算成 10 进制: 第 0 位: 5 * 160 = 5 第 1 位: F * 161 = 240 第 2 位: A * 162 = 2560 第 3 位: 2 * 163 = 8192 + -------------------------------------
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&3=2 0000…………10 0000…………11
=0000…………10
补码 补码 补码 都为 1 是才为 1
1>>2 =0 0000……………………01 补码 0000……………………00 算术右移两位(低位溢出,符号位不变,并用符号位不溢出的高位) -1>>2 = -1 1000……………………01 -1 的原码 1111……………………10 -1 的反码 1111……………………11 -1 补码 1111……………………11 (补码)算术右移两位(低位溢出,符号位不变,并用符号位不溢出的高位) 1000………………… 00 (反码)负数的补码转换为反码
10 -->2
2| 100
余数
2| 50
0(最低位)
2| 25
0
2| 12
1
2| 6
0
2| 3
0
2| 1
1
0
1 (最高位)
(100)=(1100100)
0. 6875
×
2
1.3750 …… 整数部分为 1
0. 3750
×
2
0. 7500 …… 整数部分为 0
0. 7500
×
2
1. 5000 …… 整数部分为 1
下面列出四位二进制数 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
余数
1234 1234/16 77
2
77
77/16 4
13 (D)
4
4/16
0
4
结果 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
1111 1101 , 1010 0101 , 1001 1011
10997 直接计算就是: 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997
6.4 二、十六进制数互相转换 二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个 C,C++程序员都能 做到看见二进制数,直接就能转换为十六进制数,反之亦然。 我们也一样,只要学完这一小节,就能做到。 首先我们来看一个二进制数:1111,它是多少呢? 你可能还要这样计算:1 * 2^0 + 1 * 2^1 + 1 * 2^2 + 1 * 2^3 = 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 进制值。
1.
按位异或:0^0=0, 1^0=1, 0^1=1, 1^1=0 正数的补码=原码=反码 负数的补码=反码+1 负数的反码=原码符号不变(0 -->1;1 -->0)
1+1=2 在计算机中 :补码+补码=补码
0000……………………………………1 + 0000……………………………………1 = 0000………………………………… 10
-2 的原码 10000…………………………10 -2 的反码 111111…………………………01
+0000000000000000000000000001 -2 的补码 =1111111…………………………10
-1 的反码=补码-1 1111……………………11
- 0000……………………01 =1111……………………10 反码 -1 的原码=反码元符号不变(0-->1;1-->0) =1000……………………01 -1 原码
相关文档
最新文档