二进制
二进制是一种数值表示系统,使用两个数码 0
和 1
表示数,现代的二进制记数系统是由戈特弗里德·莱布尼茨于
1679
1679
1679 年设计的。在计算机科学中,二进制是基本的数据表示形式,因为计算机系统中使用电路来表示和处理信息,而这些电路可以处于两种状态,即开或关,与二进制相对应。
运算规则可以类比十进制,十进制是 逢十进一
;二进制是 逢二进一
。
二进制的一些基本概念
-
位(Bit):二进制的最小单位,一个位可以是一个
0
或1
。 -
字节(Byte):通常由 8 8 8 个二进制位组成,可用于表示一个字符或较小的整数。
例如:二进制数 1000100010001000
共有
16
16
16 个二进制位,
2
2
2 个字节。
二进制的四则运算
-
加法:
0 + 0 = 0 , 0 + 1 = 1 , 1 + 0 = 1 , 1 + 1 = 10 0+0=0 , 0+1=1 , 1+0=1 , 1+1=10 0+0=0,0+1=1,1+0=1,1+1=10,逢二进一。
-
减法:
0 − 0 = 0 , 1 − 0 = 1 , 1 − 1 = 0 , 10 − 1 = 1 0-0=0 , 1-0=1 , 1-1=0 , 10-1=1 0−0=0,1−0=1,1−1=0,10−1=1,向高位借一当二。
-
乘法:
0 × 0 = 0 , 0 × 1 = 0 , 1 × 0 = 0 , 1 × 1 = 1 0 \times 0=0 , 0 \times 1=0 , 1 \times 0=0 , 1 \times 1 = 1 0×0=0,0×1=0,1×0=0,1×1=1。
-
除法:
0 ÷ 1 = 0 , 1 ÷ 1 = 1 0 \div 1=0 , 1 \div 1 = 1 0÷1=0,1÷1=1。
例如:二进制数 1010
和 11
相加,结果为 1101
。
二进制与十进制相互转换
虽然两种进制不同,但本质都是用来表示数值,所以我们通过一定的规则将两种进制进行转换。为表示方便,下文我们用 ( ) 2 ()_2 ()2 来表示二进制数,用 ( ) 10 ()_{10} ()10 来表示十进制数。
二进制转十进制
我们定义一个概念叫位权,就是每一位上的权值,拿 ( 123.45 ) 10 (123.45)_{10} (123.45)10 举例说明:
百位的权值为 1 0 2 10^2 102,十位的权值为 1 0 1 10^1 101,个位的权值为 1 0 0 10^0 100,小数点后一位权值为 1 0 − 1 10^{-1} 10−1,小数点后两位的权值为 1 0 − 2 10^-2 10−2。
一个显而易见的结果, ( 123.45 ) 10 (123.45)_{10} (123.45)10 实际上是由
123.45 = 1 × 1 0 2 + 2 × 1 0 1 + 3 × 1 0 0 + 4 × 1 0 − 1 + 5 × 1 0 − 2 123.45 = 1 \times 10^2 + 2 \times 10^1 + 3 \times 10^0 + \\ 4 \times 10^{-1} + 5 \times 10^{-2} 123.45=1×102+2×101+3×100+4×10−1+5×10−2
得到的,那么一个二进制数 ( 1101.101 ) 2 (1101.101)_2 (1101.101)2 来说,它每一位的位权如下图:
所以, ( 1101.101 ) 2 (1101.101)_2 (1101.101)2 对应的十进制数为:
1 × 2 3 + 1 × 2 2 + 0 × 2 1 + 1 × 2 0 + 1 × 2 − 1 + 0 × 2 − 2 + 1 × 2 − 3 = 13.625 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 \\ + 1 \times 2^0 + 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 13.625 1×23+1×22+0×21+1×20+1×2−1+0×2−2+1×2−3=13.625
总结一下,二进制转为十进制,只需将二进制每一位上的数字乘以该位的位权而后相加即可。
十进制转二进制
分为整数部分和小数部分。
整数部分,不断把十进制数整数部分除以 2 2 2 直至商为 0 0 0,余数从下往上读,就是相应二进制整数部分数字。
小数部分,不断把十进制小数部分乘以 2 2 2,每次取其整数部分的结果,直至算到小数部分全为 0 0 0 为止,从上到下读取所有整数部分的数字。
例如, ( 59.25 ) 10 (59.25)_{10} (59.25)10 转换成二进制,具体计算如下:
- 整数部分
59 ÷ 2 = 29...1 59 \div 2 = 29 ... 1 59÷2=29...1
29 ÷ 2 = 14...1 29 \div 2 = 14 ... 1 29÷2=14...1
14 ÷ 2 = 7...0 14 \div 2 = 7 ... 0 14÷2=7...0
7 ÷ 2 = 3...1 7 \div 2 = 3 ... 1 7÷2=3...1
3 ÷ 2 = 1...1 3 \div 2 = 1 ... 1 3÷2=1...1
1 ÷ 2 = 0...1 1 \div 2 = 0 ... 1 1÷2=0...1
- 小数部分
0.25 × 2 = 0.5...0 0.25 \times 2 = 0.5 ... 0 0.25×2=0.5...0
0.5 × 2 = 1...0 0.5 \times 2 = 1 ... 0 0.5×2=1...0
所以, ( 59.25 ) 10 = ( 111011.01 ) 2 (59.25)_{10}=(111011.01)_{2} (59.25)10=(111011.01)2
八进制与十六进制
计算机虽然采用二进制,但二进制书写起来冗长,并不方便人类记忆,所以在计算机中还推行了 16 16 16 进制和 8 8 8 进制,进制越大,数的表示长度也就越短。
( 100 ) 10 = ( 1100100 ) 2 = ( 144 ) 8 = ( 64 ) 16 (100)_{10}=(1100100)_{2}= (144)_{8}= (64)_{16} (100)10=(1100100)2=(144)8=(64)16
八进制
以 8 8 8 为基数的计数方法,采用 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 八个数码,逢八进一。
在 C++ 中,一个数如果要指明它采用八进制,必须在它前面加上一个 0 0 0,如: 123 123 123 是十进制,但 0123 0123 0123 则表示采用八进制。
十六进制
以 16 16 16 为基数的计数方式,有 0 − 9 , A − F 0-9 , A-F 0−9,A−F 共 16 16 16 个数码,与 10 10 10 进制的对应关系是, 0 − 9 0-9 0−9 对应 0 − 9 0-9 0−9; A − F A-F A−F 对应 10 − 15 10-15 10−15。
在 C++ 中,一个数如果要指明采用十六进制,要以 0x
开头,是数字 0
而不是字母 o
,如,
0
x
1
0x1
0x1 表示一个
16
16
16 进制数,而
1
1
1 则表示一个十进制数。
二进制、八进制、十六进制互相转换
2 , 8 , 16 2,8,16 2,8,16 分别是 2 1 , 2 3 , 2 4 2^1 , 2^3 , 2^4 21,23,24,这一点使得三种进制间可以直接互相转换。
二进制与八进制互转:
每 3 3 3 个二进制位一组,进行转换,不足位补 0 0 0,如: ( 10010 ) 2 = ( 22 ) 8 (10010)_2 = (22)_8 (10010)2=(22)8。
二进制与十六进制互转:
每 4 4 4 个二进制位一组,进行转换,不足位补 0 0 0,如: ( 1001100 ) 2 = ( 4 C ) 16 (1001100)_{2}=(4C)_{16} (1001100)2=(4C)16。
总结
本文主要介绍了计算机中的二进制、八进制、十六进制,以及它们间的互相转换,如果有问题,欢迎留言探讨。
标签:第一轮,进制,16,二进制,十进制,times,...,CSP,10 From: https://blog.csdn.net/iuiujk/article/details/143265747