# 什么是二进制
二进制是一种基于两个符号的数制系统,通常使用0和1表示
# 位与字节
在计算机中存储一个1或者一个0所需要的存储空间大小叫做位,也叫比特(bit)
八个位构成一个字节,也就是 byte
平时所说存储单位里面的B时指字节,字节是计算机中最常用的计量单位
计算机的编码,就是把字符串类型的数据,转换成bytes类型的数据
计算机的解码,就是把bytes类型的数据,转换成字符串类型的数据
# 进制
# 说明
在n进制中,从右往左分别是第0,1,2,3,4...位,从0开始
每一位都代表该位所占的权重,用幂次表示,从右往左依次是 n⁰ n¹ n² n³ n⁴.....,
进制,进制,逢n进一,所以,权重可以理解为代表多少个1
在10进制中
- 个位 代表
10⁰的权重,即 1(本位表示1个1) - 十位 代表
10¹的权重,即 10(本位表示10个1) - 百位 代表
10²的权重,即 100(本位表示100个1) - 千位 代表
10³的权重,即 1000(本位表示1000个1) - 以此类推。
因为逢
10进1如果百位是
2,表示已经累计了2 × 10² = 2 × 100 = 200个1
在2进制中
- 第
0位代表2⁰的权重,即1(本位表示1个1) - 第
1位代表2¹的权重,即2(本位表示2个1) - 第
2位代表2²的权重,即4(本位表示4个1) - 第
3位代表2³的权重,即8(本位表示8个1)
因为逢
2进1如果第2位是
2,表示已经累计了2 × 2² = 2 × 4 = 8个1
在16进制中
- 第
0位代表16⁰的权重,即1(本位表示1个1) - 第
1位代表16¹的权重,即16(本位表示16个1) - 第
2位代表16²的权重,即256(本位表示256个1) - 第
3位代表16³的权重,即4096(本位表示4096个1)
因为逢
16进1如果第
2位是2,表示已经累计了2 × 16² = 2 × 256 = 512个1
# 10进制转2进制
通过用商不断的除2,直至商为0,将所有余数逆序排列即得二进制
- 20 ÷ 2 = 10 余0
- 10 ÷ 2 = 5 余 0
- 5 ÷ 2 = 2 余1
- 2 ÷ 2 = 1 余 0
- 1 ÷ 2 = 0 余1
所以,20的二进制表示为10100
# 2进制转10进制
- 第
0位代表2⁰ = 1,0 * 1 = 1 - 第
1位代表2¹ = 2,0 * 2 = 0 - 第
2位代表2² = 4,1 * 4 = 4 - 第
3位代表2³ = 8,0 * 8 = 0 - 第
4位代表2⁴ = 16,1 * 16 =16 - 最终,1+0+4+0+16= 20
所以,二进制的10100代表了10进制的20
# 10进制转16进制
通过用商不断的除16,直至商为0,将所有余数逆序排列即得16进制
# 2进制转16进制
11100
# 方法1
先转为10进制,然后将10进制转为
11100转为2进制是28
28转为16进制
- 28÷16 = 1 余 12
- 1÷16 = 0 余 1
- 余数逆序排列,得
1C(在16进制中,C表示12)
# 方法2
(因为2⁴ = 16,所以1个16进制数正好用4个2进制数表示)
11100从右往左每隔4位拆分为 1 和1100
- 二进制
1表示10进制的1,用16进制表示为1 - 二进制
1100表示10进制的12,用16进制表示为C - 结果为
1C
# 16进制转2进制
1C
# 方法1
先转为1进制 1×16¹ + 12×16⁰ = 16+12 = 28
然后将28转为2进制 11100
# 方法2
将每一位都用2进制表示
1代表10进制的1,用2进制表示为1
C代表10进制的12,用2进制表示为1100
结果组合起来为11000
# 常见二进制
| 10进制 | 2进制 | 16进制 |
|---|---|---|
| 15 | 1111 | F |
| 255 | 1111 1111 | FF |
| 4095 | 1111 1111 1111 | FFF |
| 65535 | 1111 1111 1111 1111 | FFFF |
# 2的幂次
| 幂次 | 值 | 备注 |
|---|---|---|
| 2⁴ | 16 | 1个16进制位 |
| 2⁸ | 256 | 一个字节的取值范围: 0-255 |
| 2¹⁰ | 1,024 | ≈1K, 千字节 KB 的基础 |
| 2¹² | 4,096 | |
| 2¹⁶ | 65,536 | 2字节无符号整数的最大值 2⁶ × 2¹⁰ = 64 × 1024 = 65536 (64Kb) 2⁸ × 2⁸ = 256 × 256 = 65536 |
| 2²⁰ | 1,048,576 | ≈1M, 兆字节 MB 的基础 |
| 2²⁴ | 1,073,741,824 | ≈1G, 吉字节 GB 的基础 |
| 2³¹-1 | 2,147,483,647 | Java Integer最大值 |
| 2³² | 4,294,967,296 | 4字节无符号整数的最大值 ≈ 4.3G 32位系统能寻址的最大内存 |