1 什么是2进制
2 进制是一种计数规则
A 数字 0 1
B 规则 逢2进1
C 权 128 64 32 16 8 4 2 1
2 的幂
10进制规则
A 数字 0 1 ... 9
B 规则 逢10进1
C 权 1000 100 10 1
10 的幂
2 进制到10进制的手工算法:
就是数1的个数
421
111(2) = 4+2+1 = 7(10)
64 1
1000001(2) = 64+1 = 65(10)
1101010(2) = 64+32+8+2 = 106(10)
210(10) = ?(2)
= 11010010(2)
128 64 32 16 8 4 2 1
1 1 0 1 0 0 1 0
82 18 2
2 为啥要使用2进制
便宜!制造成本便宜
用算法解决问题。
java 利用算法解决了 10进制到2进制的相互转换问题
当输入10进制时候,java 将输入的10进制字符串
转换为 2进制数据,保存到内部
"250" -算法(方法)> 2进制数据 int long
int n = Intger.parseInt("250")
n =
当需要将内存数据显示给用户时候,在利用算法将
2进制转换为10进制的字符串显示
在计算机中:只有2进制, 补码
3 2进制在哪里
4 进制的计算规则
补码:最“便宜”的方式实现了负数计算!
16 进制?是2进制的简写!
a 将每4位2进制简写为一个 16进制数
A 逢16进一
B 数字:“0 ~ 9a ~ f” 0~15
C 权 256 16 1
41(16) = 4*16 + 1 = 65(10)
4A(16) = 4*16 + 10 = 74(10)
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 a
1011 b
1100 c
1101 d
1110 e
1111 f
1 0000 10
1 0001 11
0100 0001(2) 41(16) = 64+1 = 4*16+1 = 65
0100 0010(2) 42(16)
书写2进制时候为了方便简洁,采用16进制形式书写!
2进制 就是 16进制!
便捷的书写 -1 的2进制
int i = 0xffffffff;// -1
计算机的颜色
R G B
8位数 8位数 8位数
11111111 11111111 11111111 全白
f f f f f f
int color = 0xffffff; 表示白色
= 0xff0000; 红
= 0xffff00;
0x000000 ~ 0xffffff;
0 ~ 16777215
(int)(Math.random()*0xffffff)
(int)(Math.random()*16777215)
5 2进制计算在开发中的应用
颜色
文字编码
如何显示 50% 红
红 0~255
int r = 255/2;//? 是一个8位数
r= 01111111(2) 7f(16) 127(10)
c = 01111111 00000000 00000000
= 0x7f 00 00 ;
c 与 r 的差别 c数字的右侧 比 r多 16个0
c = r << 16;
r<<3 = 01111111 <3
01111111000
r<<16 = 01111111 00000000 00000000
c = 255/2 << 16;
(255/2<<16) + (255/2<<8) + (255/2)
255/2 = 01111111(2)
255/2<<16= 01111111 00000000 00000000
255/2<<8 = 01111111 00000000
+ 255/2 = 01111111
-------------------------------------------
01111111 01111111 01111111
将 3 个 8 位数 拼接为一个 24位的通用算法!
r = 255/2
g = 255/2
b = 255/2
color = (r<<16) + (g<<8) + b
将 4 个 8 位数 拼接为一个 32位的通用算法!
b1
b2
b3
b4
int i = (b1<<2) + (b2<<16) + (b3<<8) + b4
为了处理数据:
32位数据int a
a 拆分为 4 个 8位数据 —传送->
接收方: 4 个 8位数据 拼接为 int数据
<< 左移位运算: 经典的将byte数据合并
>>> 右移位运算:将int、long等数据进行拆分
>> 右移位运算
文字编码规则
GBK 编码规则:
A 变长编码 1~2字节
英文 1 字节 中文2字节
如:"ABC中国" —> {byte * 7}
B 支持的文字数量:中文+英文 20000+
C 中国本地最优编码
UTF-8编码规则
A 变长编码 1~4字节
英文 1 字节 中文3字节
如:"ABC中国" —> {byte * 9}
B 支持文字数量:100000+
英文 中 日 韩 希伯来 阿拉伯 ... 等地球上有的!
C 国际化最优编码
总结:
计算机只能处理“数据”
程序: 数据 + 算法
1 计算机的内部只有2进制
2 2进制可以计数
3 补码:完成负数计算的!
优点:能够处理负数问题,满足数学计算规则
缺点:有溢出计算问题,使用更大范围的补码
避免溢出问题。
4 计算机利用API(算法)解决人类使用
10进制,计算机使用2进制
Integer.parseInt() 将10进制字符串转2进制
Integer.toString() 将2进制转换为10字符串
5 如何直接写 2 进制:使用16进制!
16进制是 2进制的缩写(简写)形式
4位2进制可以缩写为 1个16进制
是计算机专业人员书写2进制的方法习惯!
如:计算机颜色的处理:2进制处理
常用16进制形式书写颜色值, 非常“方便”!
red = 0xff0000;
6 2进制的计算:进行数据的拆分和合并计算
int red=255/2, green=255/2, blue=255/2;
int color = (red<<16)+(green<<8)+blue;
new Color(color);
new Color(red, green, blue);
7 何时使用 数据的拆分和合并
将数据写出到 文件时候(互联网等)要拆分
称为序列化
从文件(互联网)读取数据需要合并数据称为
反序列化
String 的拆分(序列化) 称为“编码”
String 的合并(反序列化) 称为“解码”
编码、解码的方式:称为“编码方案”
编码方案:GBK UTF-8
GBK:中国本地化最优编码
UTF-8:国际化最优编码
乱码:编码和解码时候的 “编码方案”不一致
2 进制是一种计数规则
A 数字 0 1
B 规则 逢2进1
C 权 128 64 32 16 8 4 2 1
2 的幂
10进制规则
A 数字 0 1 ... 9
B 规则 逢10进1
C 权 1000 100 10 1
10 的幂
2 进制到10进制的手工算法:
就是数1的个数
421
111(2) = 4+2+1 = 7(10)
64 1
1000001(2) = 64+1 = 65(10)
1101010(2) = 64+32+8+2 = 106(10)
210(10) = ?(2)
= 11010010(2)
128 64 32 16 8 4 2 1
1 1 0 1 0 0 1 0
82 18 2
2 为啥要使用2进制
便宜!制造成本便宜
用算法解决问题。
java 利用算法解决了 10进制到2进制的相互转换问题
当输入10进制时候,java 将输入的10进制字符串
转换为 2进制数据,保存到内部
"250" -算法(方法)> 2进制数据 int long
int n = Intger.parseInt("250")
n =
当需要将内存数据显示给用户时候,在利用算法将
2进制转换为10进制的字符串显示
在计算机中:只有2进制, 补码
3 2进制在哪里
4 进制的计算规则
补码:最“便宜”的方式实现了负数计算!
16 进制?是2进制的简写!
a 将每4位2进制简写为一个 16进制数
A 逢16进一
B 数字:“0 ~ 9a ~ f” 0~15
C 权 256 16 1
41(16) = 4*16 + 1 = 65(10)
4A(16) = 4*16 + 10 = 74(10)
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 a
1011 b
1100 c
1101 d
1110 e
1111 f
1 0000 10
1 0001 11
0100 0001(2) 41(16) = 64+1 = 4*16+1 = 65
0100 0010(2) 42(16)
书写2进制时候为了方便简洁,采用16进制形式书写!
2进制 就是 16进制!
便捷的书写 -1 的2进制
int i = 0xffffffff;// -1
计算机的颜色
R G B
8位数 8位数 8位数
11111111 11111111 11111111 全白
f f f f f f
int color = 0xffffff; 表示白色
= 0xff0000; 红
= 0xffff00;
0x000000 ~ 0xffffff;
0 ~ 16777215
(int)(Math.random()*0xffffff)
(int)(Math.random()*16777215)
5 2进制计算在开发中的应用
颜色
文字编码
如何显示 50% 红
红 0~255
int r = 255/2;//? 是一个8位数
r= 01111111(2) 7f(16) 127(10)
c = 01111111 00000000 00000000
= 0x7f 00 00 ;
c 与 r 的差别 c数字的右侧 比 r多 16个0
c = r << 16;
r<<3 = 01111111 <3
01111111000
r<<16 = 01111111 00000000 00000000
c = 255/2 << 16;
(255/2<<16) + (255/2<<8) + (255/2)
255/2 = 01111111(2)
255/2<<16= 01111111 00000000 00000000
255/2<<8 = 01111111 00000000
+ 255/2 = 01111111
-------------------------------------------
01111111 01111111 01111111
将 3 个 8 位数 拼接为一个 24位的通用算法!
r = 255/2
g = 255/2
b = 255/2
color = (r<<16) + (g<<8) + b
将 4 个 8 位数 拼接为一个 32位的通用算法!
b1
b2
b3
b4
int i = (b1<<2) + (b2<<16) + (b3<<8) + b4
为了处理数据:
32位数据int a
a 拆分为 4 个 8位数据 —传送->
接收方: 4 个 8位数据 拼接为 int数据
<< 左移位运算: 经典的将byte数据合并
>>> 右移位运算:将int、long等数据进行拆分
>> 右移位运算
文字编码规则
GBK 编码规则:
A 变长编码 1~2字节
英文 1 字节 中文2字节
如:"ABC中国" —> {byte * 7}
B 支持的文字数量:中文+英文 20000+
C 中国本地最优编码
UTF-8编码规则
A 变长编码 1~4字节
英文 1 字节 中文3字节
如:"ABC中国" —> {byte * 9}
B 支持文字数量:100000+
英文 中 日 韩 希伯来 阿拉伯 ... 等地球上有的!
C 国际化最优编码
总结:
计算机只能处理“数据”
程序: 数据 + 算法
1 计算机的内部只有2进制
2 2进制可以计数
3 补码:完成负数计算的!
优点:能够处理负数问题,满足数学计算规则
缺点:有溢出计算问题,使用更大范围的补码
避免溢出问题。
4 计算机利用API(算法)解决人类使用
10进制,计算机使用2进制
Integer.parseInt() 将10进制字符串转2进制
Integer.toString() 将2进制转换为10字符串
5 如何直接写 2 进制:使用16进制!
16进制是 2进制的缩写(简写)形式
4位2进制可以缩写为 1个16进制
是计算机专业人员书写2进制的方法习惯!
如:计算机颜色的处理:2进制处理
常用16进制形式书写颜色值, 非常“方便”!
red = 0xff0000;
6 2进制的计算:进行数据的拆分和合并计算
int red=255/2, green=255/2, blue=255/2;
int color = (red<<16)+(green<<8)+blue;
new Color(color);
new Color(red, green, blue);
7 何时使用 数据的拆分和合并
将数据写出到 文件时候(互联网等)要拆分
称为序列化
从文件(互联网)读取数据需要合并数据称为
反序列化
String 的拆分(序列化) 称为“编码”
String 的合并(反序列化) 称为“解码”
编码、解码的方式:称为“编码方案”
编码方案:GBK UTF-8
GBK:中国本地化最优编码
UTF-8:国际化最优编码
乱码:编码和解码时候的 “编码方案”不一致
随机颜色:经典算法。