1.计算机编程通之字节与数据类型

零、前言

从你打开计算机的那一刻,从你开启一个手机游戏;从你观看一部电影,你都在使用字节。
可以说它们无处不在,而你又对它有多少了解呢?

1.引子
一个视频,如果用记事本打开,你会发现是一堆乱码,但你用播放器就能够播放。
当你随便改动几个字后,就会发现视频播放不了了,改回去,一切恢复正常。
1.计算机编程通之字节与数据类型
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负
1.计算机编程通之字节与数据类型
二进制的正负.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 的有效数字,称为`尾数`:反映数的精度
1.计算机编程通之字节与数据类型
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(二进制)
1.计算机编程通之字节与数据类型
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