零、前言
从你打开计算机的那一刻,从你开启一个手机游戏;从你观看一部电影,你都在使用字节。
可以说它们无处不在,而你又对它有多少了解呢?
1.引子
一个视频,如果用记事本打开,你会发现是一堆乱码,但你用播放器就能够播放。
当你随便改动几个字后,就会发现视频播放不了了,改回去,一切恢复正常。
![9414344-139687f13f941c8b.png](https://i-blog.csdnimg.cn/blog_migrate/885a1b379c26b4505768482c0c739e16.webp?x-image-process=image/format,png)
1.png
可以看到6.79 MB大小的视频竟然是由这么多字组成的。
视频是由字节组成的。6.79 MB有7129600 字节
字节的进制转化:
1 B = 8 bit 1 KB = 1024 B = 8192 bit
1 MB = 1024 KB 1 GB = 1024 MB 1TB = 1024 GB
2.什么是字节呢?
字节是计算机的存储单位,我们都知道计算机只能识别二进制的数,一个字节可以储存8个二进制数(比如01010011),
也就是说这个视频的本质是7129600*8的0或1的组合排列而成,可想而在是多么复杂。
管他多复杂,我们又看不懂二进制,但计算机很喜欢读它们,计算机懂,但是我们不懂怎么办?
于是聪明的人类将二进制的数和字符对应起来,成为编码,让计算机读出来二进制,转化成我们认识的字符。
编码格式就是码表,比如ASCII码,UTF-8,GBK等
3.为什么是乱码呢?
回到为什么是乱码这个问题,记事本所展现出来是:
通过查系统默认的编码表将二进制数映射出来,就是我们看到的东西。视频的二进制数是按照视频的规则排序的,
所以记事本强行翻译得到了一堆乱码。视频播放器的解码器识别视频的二进制数,从而可以让视屏播放。
4.小结
所以无论是你录个像,还是拍个照,还是打开浏览器,写篇小说,玩个游戏,都是很多的0和1在互相影响,互相作用。
就像现实世界,无论是人、桌子、小狗、或者计算机、太阳、宇宙都是由分子构成,他们互相影响,相互作用产生了这个绚丽的宇宙。
下面就来进入到程序的世界,感受另一个"宇宙"
一、在Java中一共有八种数据类型:
byte
字节、short
短整型、int
整型、long
长整型、float
浮点型、char
字符型 、boolean
布尔类型
1.byte : 字节
8位、有符号的,以二进制补码表示的整数
byte a = 17;
byte b = -5;
System.out.println(a + b);//12
关于二进制数的符号:
每个自然数都与二进制一一对应,那么负数怎么办?
对于二进制数的正负,将最高位作为符号位,0正,1负
![9414344-9d32d545d966b299.png](https://i-blog.csdnimg.cn/blog_migrate/8c1ab350672ba801496b6765ed0619ce.webp?x-image-process=image/format,png)
二进制的正负.png
2.short:短整型
与byte的唯一区别就是占2个字节,也就是由16个二进制数组成
short a = 17;
short b = -5;
System.out.println(a + b);//12
3.int: 整型
与byte的唯一区别就是占4个字节,也就是由32个二进制数组成
int a = 17;
int b = -5;
System.out.println(a + b);//12
4.long: 长整型
与byte的唯一区别就是占8个字节,也就是由64个二进制数组成
long a = 17L;
long b = -5L;
System.out.println(a + b);//12
5.char:字符型
一个单一的 16 位 Unicode 字符;虽然用整数表示,但可以储存任何字符
char x = 97;
char x = 'c'; //两者是等效的
char ch = 'p';//char还可以强转成int
System.out.println((int) ch);//112
6.boolean:布尔型
初始值false,范围[true、false]
boolean isOk = false;
System.out.println(!isOk);//!操作取反
7.float:浮点型
二进制中数字的正负可以用最高位作为符号位来表示,那么小数呢?
计算机中,一个数N的浮点形式可以用:
N = M*2^E
E 表示 2 的幂,称为`阶码`,确定N的小数点位置:反映浮点数的范围
M 表示 N 的有效数字,称为`尾数`:反映数的精度
![9414344-ec3f8c401ab4fc22.png](https://i-blog.csdnimg.cn/blog_migrate/bc71751d1b58873a43c235f7b76c77b4.webp?x-image-process=image/format,png)
float.png
拿7.25举例:
7.25 = 7 + 0.25 = 1*2^2 + 1*2^1 + 1*2^0 + 0*2^-1 + 1*2^-2 111.01(二进制)=1.1101*2^2(二进制)
![9414344-f813db2e19587c86.png](https://i-blog.csdnimg.cn/blog_migrate/ccbe4d38c9f199e2a4bde0e314c8575c.webp?x-image-process=image/format,png)
float.png
8.double:双精度浮点型
与float相似,只是占8个字节,共64bit,符号位:1bit,阶码:11bit,尾数:52bit
类型 | 字节数 | 位数 | 范围 | 初始值 |
---|---|---|---|---|
byte | 1 | 8 | -2^7 ~ 2^7-1 (-128 ~ 127) | 0 |
short | 2 | 16 | -2^15 ~ 2^15-1 (-32768~32717) | 0 |
int | 4 | 32 | -2^31 ~ 2^31-1 (-2147483648~2147483647) | 0 |
long | 8 | 64 | -2^63 ~ 2^63-1 | 0L |
boolean | 1 | 8 | true/false | false |
char | 2 | 16 | 0 ~ 2^16-1(0 ~ 65535) | null |
float | 4 | 32 | -3.4 * 10^-38 ~ 3 .4 * 10^38 | 0.0f |
double | 8 | 64 | -1.7 * 10^-308 ~ 1.7 * 10^308 | 0.0d |