一、计算机硬件
计算机的三大硬件:CPU、内存、硬盘
1、内存的存储形式
内存采用的方案:电容器
电容相当于电池
在内存当中,每一比特的数据都是存储在一个电容当中
存储数据:0就给电容充电,1就不给电容充电
读取数据:通过放电,检测电容是否带电,来读取数据
2、磁盘的的工作原理
存储数据:电生磁
当电流通过磁头线圈时,根据安培环路定律,线圈会产生磁场。从而使磁颗粒产生对应的磁场,存储数据 N代表0 S代表1
一个小的磁颗粒都会存储一个比特数据
读取数据:磁生电
磁颗粒会产生磁场,磁头划过磁颗粒产生电流,通过电流的方向,判断存储0/1
计算机80%以上的事件都是读取数据
磁盘找数据的时间3-5ms
CPU计算数据的时间0.2ns
1ms=1*10^6ns
如果磁盘之间将数据共给CPU,这是不合理的
内存查找数据的时间大约是20ns左右
CPU的工作效率大约是10%
二、java文件编译
进行编码之后,xx.java 源文件 通过idk,使用iavac会将文件变为xx.class二进制的字符码文件
这两个都是以文件的形式才能出在磁盘中
三、Java数据类型
1、数据类型
数据类型:数据在内存中的存储形式。
强数据语言:C、C++、Java(inta=10)
弱数据类型语言:js、python...(vara=10.00)
java的数据类型:
常用的整型:
byte:1bit符号位,7bit数值位
short:1bit符号位,15bit数值位
int:1bit符号位,31bit数值位
long:1bit符号位,63bit数值位
浮点型:
float:1bit符号位,8bit阶位(小数点存在的位置),23bit尾数
double:1bit符号位,11bit阶码,52bit尾数
总结:
2、计算机对数据的存储
计算机对整型数据的存储方式:
(1)、源码
定义两个byte类型的变量:
byte a = 10;
byte b = -10;
byte是基本数据类型-------------------->数据类型决定数据在内存当中如何存储
byte大小是8bit(1字节) 1bit符号位 7bit代表数值位
byte a = 10;: 00001010 (源码)
byte b = -10; 00001010 (源码)
数据的源码:数据直接转换成对应的二进制形式,然后根据数据类型进行补充,其中正数最高位0,负数最高位是1
当进行a+b的运算的时候,源码的运算:
结果不为0,这和事实不符合,所以计算机一定不是以源码的形式存储数据
(2)、反码
正数的反码 = 源码
负数的反码 = 源码的符号位不变,其余按位取反
a:反码: 00001010 (反码)
b:反码: 11110101 (反码)
计算a+b:
此时结果为-0
所以计算机存储数值类型的数据肯定不是存储反码,因为反码存在+-0的问题
(3)、补码
正数的补码 = 反码 = 源码
负数的补码 = 在反码的基础上末尾+1
a:反码: 00001010 (补码)
b:反码: 11110110 (补码)
此时运行结果为100000000,但是byte只能占用8bit内存,所以会产生溢出,只能存储00000000
此时符号位为0,所以00000000(补码) ------------->00000000(源码) = 0
计算机当中存储数值类型数据使用的是补码的形式
经典题:
public class Demo {
public static void main(String[] args) {
byte a = 127;
byte b = 1;
byte c = (byte) (a + b);
System.out.println(c);
}
}
-128
结果是-128
因为byte表达的范围是(-128~127)
当127+1=128的时候,而且c也是byte类型
所以会发生溢出,要想在(-128~127)范围里c只能是-128