目录
计算机三大硬件:CPU、内存、磁盘
内存
磁盘
存储数据(电生磁)
读取数据(磁生电)
java代码
数据类型
强数据类型语言
弱数据类型语言
基本数据类型:整型、布尔型、浮点型、字符型
整型
以byte为例,计算机对整形的存储方式
数据的源码
运算
反码
运算
补码
运算
除余法
另一种方法
byte例题
浮点型
计算机三大硬件:CPU、内存、磁盘
由于磁盘读取数据(3-5ms)与CPU计算数据(0.2ns)差距过大,所以中间加了内存。
由内存直接给CPU读取数据(20ns)可以提高CPU利用率。
0.2ns/20ns大约1%
内存
内存采用电容器的方案。
电容实际相当于一个电池。
通过每个电容的充放电原理存储数据。
磁盘
磁盘表面并不光滑,由一圈圈磁道组成。
磁道由一颗颗磁颗粒组成。
磁盘存储的原理是电生磁/磁生电。
磁盘中的数据既是以二进制形式存储的,又是通过文件和文件系统的结构来组织和管理的。
一个磁颗粒存储1bit数据。
存储数据(电生磁)
通过使磁头带电,控制电流方向来存储数据。
假设0为S极,1为N极,要存储数据01010110。
图中磁头带了S极,异性相斥,使下方电磁粒带了N极,在磁颗粒上存了数据1。
然后继续滑动磁头,完成数据的存储。
读取数据(磁生电)
当磁头划过磁颗粒时,磁颗粒的磁场使磁头产生电流,根据电流的方向判断数据内容。
java代码
xx.java文件是源文件,计算机看不懂。
javac将文件编译成xx.class文件。
xx.class文件通过java命令编译进内存当中。
数据类型
数据在内存中的存储形式
强数据类型语言
存储数据时必须清楚数据类型
C C++ java
int a=10;
float b=10.00;
弱数据类型语言
js python
var a=10;
var b=10.00;
基本数据类型:整型、布尔型、浮点型、字符型
整型
byte short int long
以byte为例,计算机对整形的存储方式
byte a=10;
byte b=-10;
byte是基本数据类型---数据类型决定数据在内存当中如何存储
byte大小是8bit(1字节)1bit符号位 7bit数值位
10:00001010(源码)
-10:10001010(源码)
数据的源码
数据直接转化成对应的二进制形式,然后根据数据类型进行补充,正数最高位为0,负数最高位为1
int a=-10;
1000 0000 0000 0000 0000 0000 0000 1010(源码)
short b=-12;
1000 0000 0000 1100(源码)
运算
所以计算机存储数据肯定不是存储源码,源码的相反数相加不为0
反码
正数的反码=源码;
负数的反码=源码的符号位不变,其余位按位取反
byte a=10;
byte b=-10;
a:反码:0000 1010(反码)
b:反码:1111 0101(反码)
运算
所有计算机中的数据肯定不是反码,反码存在+-0的问题
补码
正数补码=反码=源码
负数补码=反码的基础上末尾+1
byte a=10;
byte b=-10;
a:补码:0000 1010(反码)
b:补码:1111 0110(反码)
运算
所以计算机当中存储数值类型的数据是补码的形式
除余法
步骤:
除以2:将十进制数除以2
取余数:记录下除法的余数(只可能是0或1)
商继续除2:将得到的商再次除以2,并重复步骤2
重复直到商为0:继续上述过程,直到商为0为止
余数反转:将所有得到的余数按相反的顺序排列(即最先得到的余数放在最后,最后得到的余数放在最前)
另一种方法
依次罗列出2^0开始的各个数值
寻找当前数据在那个区间,在区间左侧标1,用原数据减去标一的数值,取差继续步骤
直到数据落在罗列的数值上,此时相差为0
从右侧往左侧读数
byte例题
byte a=127;
byte b=1;
byte c=(byte)(a+b);
System.out.println(c);
byte最大数:0111 1111(127)
最小数:1000 0000(-128)
a:0111 1111
b:0000 0001
直接进行a+b=1000 0000(-128)
浮点型
float double