如同十进制,逢十进一, 借一当十
二进制就是,逢二进一,借一当二
二进制数:
1(2) -- 1(10)
10(2) -- 2(10)
11(2) --- 3(10)
100(2) -- 4(10)
......
为什么要了解二进制 ?
因为计算机存储和计算数据时,就是以二进制的形式处理的。
1 十进制与二进制的转换
十进制 --》 二进制 除2反向取模
10 /2 = 5...0
5/2 = 2...1
2/2= 1...0
1/2= 0....1 = 1010
二进制 --》十进制 *2相加
1010 = 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 0 * 2^0
= 1*8 + 0*4 + 1*2 + 0*1
= 10
2 小数的二进制表示
13.625
整数部分13转换成二进制
13/2 = 6 - 1
6/2 = 3 - 0
3/2 = 1 - 1
1/2 = 0 -1
13 ——》 1101
小数部分0.625转换成二进制
0.625 * 2 = 1.25 -- 1
0.25 * 2 = 0.5 -- 0
0.5* 2 = 1.0 --- 1
0.0*2 = 0---- 0
0.625 ——》 0.101
13.625 ——》 1101.101
二进制整数部分 增加一位*2
1 2 4 8 16 32 .....
2^0 2^1 ....
二进制小数部分 增加一位除2
0.5 0.25 0.125 ...
2^-1 2^-2 ....
1/2 1/4 1/8 ....
注意:十进制小数部分只有是0.5 , 0.25 , 0.125 ... 这一系列有规律的小数组合才能完全转换成二进制小数,否则会出现精度误差
0.4 * 2 = 0.8 0
0.8*2 = 1.6 1
0.6*2 = 1.2 1
0.2*2=0.4 0
0.4*2=0.8 0
0.4 ~ 0.0110011 -> 0.4
3 二进制的正负表示
最高位表示符号位 , 0 正 , 1 负 (假设8位)
+10 -> 0000 1010
-10 -> 1000 1010
4 原码 反码 补码
计算机存储和计算二进制时,使用的是二进制补码
需要先了解什么原码 , 反码, 补码
正数的原码与反码,补码相同,所以只研究负数原码,反码和补码的关系特点。
原码:十进制通过转换规则,转换成二进制数就称为原码
补码 : 与原码互补 , 原码 与 补码 相加 各位均为0,整体进1
补码计算:
-10(10进制) --》 1 1010(二进制原码) + ?(补码) = 1 10000
? = 10000 - 01010 = 00110 = 1 0110(补)
发现:1 0110(补码) -1 = 10101 = 1 1010(原码)按位取反
总结:负数原码的符号位不变,其余位数取反再+1 = 补码
-12 = 1 1100(原码) = 1 0011(取反) + 1 = 10100(补码)
反码:负数原码的符号位不变,其余位数取反
5 原码 反码 补码计算
原码在进行减法计算时比较麻烦
5 - 7 = 5 +(-7) = 2
0000 0101 + 1000 0111
最终的计算结果和绝对值最大的那个的数的符号相等 1
大数-小数 0111 - 0101 = 1000 0010 = -2
(-)7-5
反码在计算减法时,比较简单,可以将符号也参与运算
5-7
0000 0101 + 1000 0111
0000 0101(反) + 1111 1000(反) = 1111 1101(反) -> 1000 0010 = -2
3 - 5
0000 0011 + 1000 0101
0000 0011(反) + 1111 1010(反) = 1111 1101(反) = 1000 0010(原) = -2
5-5 = 5+(-5)
0000 0101 + 1000 0101
0000 0101 + 1111 1010 = 1111 1111 (反) = 1000 0000 = -0
如果使用反码计算, 0就会有2种表示 +0 , -0
补码计算减法 ,比较简单,符号位可以直接参与运算
5-7 = 5+(-7)
0000 0101 + 1000 0111
0000 0101(反) + 1111 1000(反)
0000 0101(补) + 1111 1001(补) = 1111 1110(补) -1 = 1111 1101(反) = 1000 0010 = -2
5-5 = 5+(-5)
0000 0101 + 1000 0101
0000 0101 + 1111 1010
0000 0101 + 1111 1011(补) = 1111 1112 = 0000 0000(补) = 0