一、二进制。
- 1、逢二进一方式。
- 2、十进制转二进制,除 2 取余法。
- 3、计算机中存储数据的最小单位。
二、ASCII 编码表。
一、二进制:二进制是计算机的数制,它只有两个数值 0 和 1。对于计算机识别我们输入的文字,它都最终都会转化为二进制,由 0 和 1 组合成对应的数制。二进制采取逢二进一方式的规则来进位。
1.1、二进制表现形式:通过 1 和 0 进行组合。
1.2、0 的二进制是 0。
1.3、1 的二进制是 1。
1.4、2 的二进制不是 2 噢,因为二进制只能识别 0 和 1。所以,大于 1 的数需转换为对应的二进制码计算机才能识别出来。那么,2 的二进制怎么算呢?拿二进制的 1 + 1 ,根据封二进一的规则,1 + 1 不是等于 2 ,而是因为逢二进一应该向前进一位。1 + 1 = 0 并向前进一位,前一位是 1。所以,2 的二进制是 10。
- 1.5、3 的二进制在 2 的二进制基础上加 1。2 的二进制是 10,10 + 1,个位 0 + 1 = 1,十位的 1 没有数值相加,直接拉下来。所以,3的二进制是 11。
- 1.6、4 的二进制在 3 的二进制基础上加 1。3 的二进制是 11,个位 1 + 1 = 0 并向十位进一位。十位上的 1 + 进位的 1 = 0 并向百位进一位。百位没有数相加,所以是进位上来的 1。4 的二进制是 100。
-
1.7、5 的二进制在 4 的二进制基础上加 1。4 的二进制是 100,个位 0 + 1 = 1,十位的 0 和 百位的 1 没有数值相加,直接拉下来。所以,5 的二进制是 101。
1.8、6 的二进制在 5 的二进制基础上加 1。5 的二进制是 101,个位 1 + 1 = 0 并向十位进一位。十位上的 0 + 进位的 1 = 1。百位 1 没有数值相加,直接拉下来。所以,6 的二进制是 110。
- 1.9、7 的二进制在 6 的二进制基础上加 1。6 的二进制是 110,个位 0 + 1 = 1,十位 和 百位的 1 没有数值相加,直接拉下来。所以,7 的二进制是 111。
- 1.10、8 的二进制在 7 的二进制基础上加 1。7 的二进制是 111,个位 1 + 1 = 0 并向十位进一位。十位 1 + 进位的 1 = 0 并向百位进一位。百位 1 + 进位的 1 = 0 并向千位进一位。千位没有数相加只显示百位的进位 1 。所以,8 的二进制是 1000。
- 1.11、9 的二进制在 8 的二进制基础上加 1。8 的二进制是 1000,个位 0 + 1 = 1,十位、百位 和 千位没有数相加,直接拉下来。所以,9 的二进制是 1001。
- 1.12、10 的二进制在 9 的二进制基础上加 1。9 的二进制是 1001,个位 1 + 1 = 0 并向十位进一位,十位 0 + 1 只显示个位的进位 1。百位 和 千位没有数相加,直接拉下来。所以,10 的二进制是 1010。
- 1.13、以上通过 1 ~ 10 演示一下转换成二进制逢二进一的过程。这就是二进制,借助它可以把任意数转化成符合计算机要求的 0,1 的二进制形式。
2、十进制转二进制,除 2 取余法:以上是通过 0 和 1 加法计算二进制,这些数都比较小。那么,如果遇到大数难道也通过这样一步一步加起来,再推一个数的二进制出来吗?从时间和精力上显然这个是有难度的。其实,以上只是梳理一下计算机识别的是二进制,二进制的转化概念。对于任意数转化为二进制可以用 除 2 取余法,这个方便很多。
2.1、除 2 取余法顾名思义就是 目标数 / 2 取余数。下面用 除 2 取余法 计算 2 ~ 10 的二级制。
2.2、2 的 二进制用除 2 取余法:2 除以 2 得 1 余 0,1 比 2 小不用除。取 1 和余数 0 由底往上推得出 10。2 的二进制是 10。
- 2.3、3 的 二进制用除 2 取余法:3 除以 2 得 1 余 1,1 比 2 小不用除。取 1 和余数 1 由底往上推得出 11。3 的二进制是 11。
- 2.4、4 的 二进制用除 2 取余法:4 除以 2 得 2 余 0,2 除以 2 得 1 余 0,1 比 2 小不用除。取 1 和余数 0,0 ,由底往上推得出 100。4 的二进制是 100。
- 2.5、5 的 二进制用除 2 取余法:5 除以 2 得 2 余 1,2 除以 2 得 1 余 0,1 比 2 小不用除。取 1 和余数 0,1 ,由底往上推得出 101。5 的二进制是 101。
- 2.6、6 的 二进制用除 2 取余法:6 除以 2 得 3 余 0,3 除以 2 得 1 余 1,1 比 2 小不用除。取 1 和余数 1,0 ,由底往上推得出 110。6 的二进制是 110。
- 2.7、7 的 二进制用除 2 取余法:7 除以 2 得 3 余 1,3 除以 2 得 1 余 1,1 比 2 小不用除。取 1 和余数 1,1 ,由底往上推得出 111。7 的二进制是 111。
- 2.8、8 的 二进制用除 2 取余法:8 除以 2 得 4 余 0,4 除以 2 得 2 余 0,2 除以 2 得 1 余 0,1 比 2 小不用除。取 1 和余数 0,0,0 ,由底往上推得出 1000。8 的二进制是 1000。
- 2.9、9 的 二进制用除 2 取余法:9 除以 2 得 4 余 1,4 除以 2 得 2 余 0,2 除以 2 得 1 余 0,1 比 2 小不用除。取 1 和余数 0,0,1 ,由底往上推得出 1001。9 的二进制是 1001。
- 2.10、10 的 二进制用除 2 取余法:10 除以 2 得 5 余 0,5 除以 2 得 2 余 1,2 除以 2 得 1 余 0,1 比 2 小不用除。取 1 和余数 0,1,0 ,由底往上推得出 1010。10 的二进制是 1010。
- 2.11、138 的二进制用除 2 取余法:138 除以 2 得 69 余 0,69 除以 2 得 34 余 1,34 除以 2 得 17 余 0,17 除以 2 得 8 余 1,8 除以 2 得 4 余 0,4 除以 2 得 2 余 0,2 除以 2 得 1 余 0,1 比 2 小不用除。取 1 和余数 0,0,0,1,0,1,0 ,由底往上推得出 1000 1010。138 的二进制是 1000 1010。
- 以上是用 除2取余法 转化二进制的流程。
3、计算机中存储数据的最小单位是字节。计算机采用 8 个二进制数为一组来储存数据,称为一个字节(byte 简称 B)。其中,每个二进制为一位(bit 简称 b)。一个字节等于 8 个二进制位,1byte = 8bit,简称 1B=8b。
3.1、比如 2 的二进制是 10,它存到计算机并不是 10 这个形式。而是,0000 0010 这样的形式。4 的二进制是 100,存到计算机是 0000 0100。
3.2、关于计算机最少存储单位是字节也可以在计算机中验证。随便查看一个文件的属性都可以看到它存储单位是字节。
3.2.1、java 文件可以查看到是用字节做单位来存储。
- 3.2.2、pdf 的文件也可以查看到是用字节做单位来存储。
- 3.2.3、txt 文件也可以查看到是用字节做单位来存储。
- 以上介绍了计算机保存数据的最小单位是字节。
二、ASCII 编码表,关于 Text 文本、Image 图片 和 Sound 声音是怎样储存的?实际上最底层还是二进制。
- 2.1.1、Text 文本:无论是英文字符、数字、符号、中文 或 其他国家文字都会有对应的编码表,这些编码表都有对应的数字编码,这些数字编码都会有对应的二进制形式。提到编码表,就得提最为有名的编码表 --- ASCII 编码表,全称 “ 美国信息交换标准编码 ”,ASCII 定义了常见的英文字符、数字字符 和 西欧字符对应的数字编码。关于 ASCII 表详细的内容信息可到网上搜索,很多相关的资源。
- 2.1.2、从 ASCII 表中查阅到字符 a 对应的数字是 97。从程序中可以测试一下字符 a 是不是等于 97 ?
package com.elementaryJava.Lesson07Variable;
/**
* USER:Torres
* Function:字符对应的 ASCII 码
*/
public class VariableDemo2 {
public static void main(String[] args) {
// 声明一个字符变量 c 并赋值为字符 a,char 类型只能保存一个字符
char c = 'a';
System.out.println(c + 0); // 变量 c + 数字0
System.out.println(c + 1);
}
}
------------------------------------------------------------------------------
D:\work\java\jdk11\bin\java.exe "-javaagent:D:\work\IntelliJ IDEA 2020.1.3\lib\idea_rt.jar=4107:D:\work\IntelliJ IDEA 2020.1.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\workspace\learnJava\out\production\learnJava com.elementaryJava.Lesson07Variable.VariableDemo2
97
98
Process finished with exit code 0
从输出中看到,字符 a 赋值到 c 变量。变量 c 和数字 0 相加。得到的结果是 97,变量 c 和数字 1 相加,得到的结果是 98。反推 c 变量里的值 'a' 就是 97 这个数字编码。当然,真正存到计算机的也不是 97,而是 97 对应的二进制形式。根据这个实验可以了解到平常接触的字符其实都会有对应的编码表,这些编码表根据特定的数值 和 底层二进制进行交互。
2.1.3、字符参与运算 和 直接输出字符的表现形式。当声明了字符类型 char 的变量 c 为 'a' 值,输出时变量 c 结果是 a 值。而,用 c 和数字 1 运算时则输出数字 98 。这是因为,直接调用 c 变量进行输出,计算机知道这个变量 c 是 char 字符类型,它会输出 97 对应的值 a。而变量 c 参与运算时,计算机知道这是一个运算,它会用 97 + 1 进行运算,输出运算后的结果。
package com.elementaryJava.Lesson07Variable;
public class VariableDemo2 {
public static void main(String[] args) {
char c = 'a';
System.out.println(c);
System.out.println(c + 1);
}
}
------------------------------------------------------------------------------
F:\work\java\jdk11\bin\java.exe "-javaagent:F:\work\IDEA-2020\IntelliJ IDEA 2020.1.3\lib\idea_rt.jar=3343:F:\work\IDEA-2020\IntelliJ IDEA 2020.1.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\workspace\learnJava\out\production\learnJava com.elementaryJava.Lesson07Variable.VariableDemo2
a
98
Process finished with exit code 0
- 2.1.4、中文是 unicode 编码,好像 ‘汉’ 的编码是 27721,‘字’的编码是 23383。通过这些唯一的编码值映射到计算机能识别到的二进制形式。
package com.elementaryJava.Lesson07Variable;
/**
* USER:Torres
* Function:字符对应的 ASCII 码
**/
public class VariableDemo2 {
public static void main(String[] args) {
char c = '汉';
char c1 = '字';
System.out.println(c + 0);
System.out.println(c1 + 0);
}
}
------------------------------------------------------------------------------
F:\work\java\jdk11\bin\java.exe "-javaagent:F:\work\IDEA-2020\IntelliJ IDEA 2020.1.3\lib\idea_rt.jar=3989:F:\work\IDEA-2020\IntelliJ IDEA 2020.1.3\bin" -Dfile.encoding=UTF-8 -classpath D:\work\workspace\learnJava\out\production\learnJava com.elementaryJava.Lesson07Variable.VariableDemo2
27721
23383
Process finished with exit code 0
2.2、Image 图片的存储过程。
2.2.1、图片其实是以无数个像素点组成。当把截图放到画图工具,放大都一定程度就会看到图案有些小方块。这些小方块就是像素点。
- 2.2.2、画图工具上移动鼠标也能看到定位的像素在不停改变。通过这点也可以反映出鼠标定位的点就是当前像素点。
- 2.2.3、图片中的像素点着色的基础是 RGB 颜色。无数个像素点根据自身不同的颜色组合在一起形成了图片。
- 2.2.4、计算机对于图片的存储,其实就是对像素点中的 RGB 颜色参数转化成对应的二进制存储。
2.3、Sound 声音的存储过程。
2.3.1、声音的表现形式是声波,将声波的波形转换成一连串的二进制数据来进行储存,当需要播放的时候再把二进制数据转换成声波还原声音。