Java基础1

计算机的三大硬件

数据类型

数据类型:数据在内存当中的存储形式

语言从数据类型角度分类:

强数据类型语言:例如C C++ java 等,必须知道存储的类型和大小

定义方式

int a=10;

float a=10.00

弱数据类型语言:js python

定义方式

var a=10

var a=10.00

数据类型的分类:

1.基本数据类型
a.整型 byte short int long

数据大小

b.浮点型 float double

数据大小

c.布尔型 boolean
d.字符型 char

2.引用数据类型

a.类  String

b.接口

c.数组

各种数据类型存储所需的字节长度,以及取值范围

磁盘存储数据的原理

磁盘的结构

磁盘的表面并不光滑,而是由一圈圈的磁道构成的,将磁道切开,单看一条磁道的存储

磁盘存储原理:电生磁,磁生电

存储数据:电生磁

当电流通过磁头线圈时,根据安培环路定律,线圈会产生磁场。从而使磁颗粒产生对应的磁场,存储数据 N代表0, S代表1

一个小的磁颗粒都会存储一个比特数据

读取数据:磁生电

磁颗粒会产生磁场,磁头划过磁颗粒产生电流,通过电流的方向,判断存储0/1

计算机80%以上的事件都是读取数据

cpu运行效率分析

磁盘找数据的时间3-5ms

CPU计算数据的时间0.2ns

1ms=1*10^6ns

如果磁盘之间将数据共给CPU,这是不合理的,因此我们需要借助内存

内存查找数据的时间大约是20ns左右

CPU的工作效率大约是10%

内存的存储数据的原理

内存采用的方案:电容器,电容----->电池

在内存当中,每一比特的数据都是存储在一个电容当中

存储数据:

0就给电容充电,1就不给电容充电

读取数据:

通过放电,检测电容是否带电,来读取数据

计算机对数据的存储方式

例题:

byte a=10

byte b=-10

byte是基本数据类型----------->数据类型决定数据在内存当中如何存储

byte大小是8bit(1字节) 1bit符号位 7bit数值位

十进制数转化成二进制的方法

10:1010 除余法

配凑的方法

1 2 4 8 16 32 64 128 256 512 1024 2048 4096

10=8+2=1*2^3+0*2^2+1*2^1+0*2^0

1010

byte a=10 #10:0 00001010

byte b=-10 #10:1 00001010

数据的二进制表示方式

源码

数据直接转换成对应的二进制形式,然后根据数据类型进行补充,其中正数最高位是0,负数最高位是1

int a=-10

1 0000000 00000000 00000000 00001010(源码)

short b=-12

1 0000000 00001100(源码)

运算:a+b (二进制在进行加减运算的时候符号位参与运算)

计算机存储数据肯定不是存储源码,因为源码的相反数相加结果不是0

反码

正数的反码=源码

负数的反码=源码的符号位不变,其余按位取反

a:反码:0 0001010

b:反码 1 1110101

此时执行a+b 00001010 +11110101 -------------- 11111111(反码)------->10000000(源码)---------->-0

计算机存储数据肯定不是存储反码,因为反码存在正负0的问题

补码

正数的补码=反码=源码

负数的补码=在反码的末尾+1

a:00001010(补码)

b:11110110 补码) 00001010 11110110

100000000----------->因为数据类型规定了数据在内存中的存储大小,此时截取数据(从右往左) 00000000

00000000(补码)----------->00000000(源码)=0

计算机当中存储数据使用的是补码的形式

计算机中整型数据的存储

public class main {
    public static void main(String[] args){
        byte a=127;
        byte b=1;
        byte c=(byte) (a+b);
        //byte类型 8bit 7位
        //byte类型当中:
        //01111111  127  最大数
        //10000000  -128  最小数
        //2^8一共可以表示256个数,0-127已经表示了128个数,前面只能是有128个负数,-1~-128
        //因为byte类型的范围是-128~127,此时如果127+1还在byte类型的表示范围之内,此时值=-128
        //a+b: 01111111+00000001=10000000
        
    }
}

输出结果:

解释原因

byte类型 8bit 7位
byte类型当中:
        01111111  127  最大数
        10000000  -128  最小数
        2^8一共可以表示256个数,0-127已经表示了128个数,前面只能是有128个负数,-1~-128
        因为byte类型的范围是-128~127,此时如果127+1还在byte类型的表示范围之内,此时值=-128
        a+b: 01111111+00000001=10000000

计算机中浮点型数据的存储

浮点型精度丢失问题
public class main {
    public static void main(String[] args) {
        //System.out.println(1.2 - 1);//精度丢失
        
        //0.2=(0.00110011...)2
        //浮点数默认用double存储,
       
       
    }

//float单精度类型  1bit 8bit 23bit   共32bit
// double双精度   1bit 11bit 52bit   共64bit
}

精度丢失原因:

数据无法进行完整化的表述,如果对数据进行相应存储位数的舍弃,会导致精度丢失

浮点数二进制转化

//0.2转成二进制存储:小数点后面的数据乘2,并取其整数值

//0.2*2=0.4 ----0

//0.4*2=0.8 ----0

//0.8*2=1.6 ----1

//0.6*2=1.2 ----1

//0.2*2=0.4 ----0

//0.4*2=0.8 ----0

//0.8*2=1.6 ----1

//0.6*2=1.2 ----1

//.....

输出结果:

解决方案:
BigDecimal 完成对精度要求非常高的计算
public class main {
    public static void main(String[] args) {
        //和精度强相关 BigDecimal 完成对精度要求非常高的计算
        BigDecimal b1=new BigDecimal(Double.toString(1.2));
        BigDecimal b2=new BigDecimal(Double.toString(1));
        Double value=b1.subtract(b2).doubleValue();//将相减的结果转为double类型
        System.out.println(value);
    }

//float单精度类型  1bit 8bit 23bit   共32bit
// double双精度   1bit 11bit 52bit   共64bit
}

关于显示器显示数据的方案

计算机存储视觉信息和听觉信息

视觉信息包括:颜色,亮点,坐标 颜色和亮度可以归为一个

听觉信息包括:音色,振幅,时间间隔

视觉信息

显示器通过像素点进行显示,左上角的点是像素原点

计算机存储像素点:

每个像素点展示:红黄蓝三原色 (0-255)每个数值可以看作byte 共有3byte

每个元素的坐标 : 2short类型 (2*16bit)

计算机存储一个像素点消耗7bit------56bit

如果一个屏幕中有2^16*2^16个像素点,对这项像素点进行存储,所需要的存储空间是非常庞大的。

如果存储一些字符,abc 平均每个文字200个像素点进行存储,大约11200bit

计算机是无法存储如此庞大的数据,所以用字符集的方式减少计算机的存储量

字符集ASCII码

通过自定义映射表的方式

假设用如下的字符集进行存储

存储abc只需要24bit,大大减少存储空间

对于字符的颜色和大小,由于文本形式,我们只需要对文件的最左上角的像素点的坐标,就可以对文件当中所有字符坐标进行存储,对于颜色会进行单独存储 。因此字符集会简化字符的存储

乱码:

产生原因发送方和接收方采用了不同的字符集转换二进制数据

假设左侧为发送方采用的字符集,右侧为接收方,接收方采用ASCII码进行存储,每8bit表示一个字符,但是由于两端编码在不同的字符集当中对应不同的字符,因此导致乱码。

char类型

1.字符类型实际上是一个16位无符号整数,这个数对应字符的编码

2.java字符类型采用Unicode字符集编码。Unicode是世界通用的定字长字符集,所用字符都是16位

utf-8中的u指的是unicode

public class main {
    public static void main(String[] args) {
      char a1='中';
      char a2='\u4e2d';
        System.out.println(a1);
        System.out.println(a2);
    }


}

’4e2d‘为’中‘所对应的16位Unicode编码

3.任何一个字符都可以转化为一个整数,整数的范围是0-65535

public class main {
    public static void main(String[] args) {
      int a1='中';
      System.out.println(a1);

    }


}

4.可以查看某个数对应着那个字符

public static void main(String[] args) {
        char c = 69;
        System.out.println(c);

转义字符

对于不方便输出的字符可以采用转义字符表示:

例如:

public static void main(String[] args) {
   int num=100;
   String json="{"+"\"count\":"+num+"}";
    System.out.println(json);
   String dataString="[{\"id\":\"1\",\"name\":\"张三\"},{\"id\":\"2\",\"name\":\"李四\"}]";
    System.out.println(dataString);

}

转义字符 含义

\n 表示回车

\r 表示换行符

\\ 表示反斜杠( \ )

\' 表示单引号( ' )

\" 表示双引号( " )

boolean类型

boolean(布尔)类型有两个值:flase和true,用来判断逻辑条件。数值型和boolean之间不能直接转化。

自动类型转换--大碗装小碗

自动类型转化图

int转化成float,32位数值为转化成带有23位数值位的浮点数,会造成精度丢失,数值较大会造成精度丢失

long转化成double,64位数值为转化成带有52位数值位的浮点数,会造成精度丢失,数值较大会造成精度丢失

强制类型转换---小碗装大碗

极大概率会造成精度丢失

例如

public static void main(String[] args) {
    int a=1314;
    byte b=(byte) a;

    System.out.println(b);

}

int转化为byte,在数值较大的情况下导致精度丢失,如下,10bit的int类型数据转化成8bit的byte类型数据,会丢弃一部分数据导致精度丢失

数据较小,则不会产生精度丢失

3bit的int类型数据转化成8bit的byte类型数据,不会导致精度丢失

数据的运算

 public static void main(String[] args) {
        //除号是整除运算
        System.out.println(5/2);//如果是被除数是整型的话,结果是整型
        System.out.println(5.0/2);//如果是被除数是浮点型的话,结果是浮点型
        //System.out.println(10.0/0);
        //System.out.println(8/0);//会报错
//        System.out.println(5%2);//取余运算
//        System.out.println(3+2*12/4);
//        System.out.println((3+9)*8.0/2%2);
        

    }

结合赋值和运算符

x+=4

x=x+4

自增自减运算符

++m先加再赋值,m++先赋值再加

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值