0基础学java之Day03(上午完整版)

一、存储单位

最小单位:比特位,bit,1位比特位要么是0,要么是1

最基本的单位:字节,byte,1个字节=8位

1个字节:1B(B=byte)

1KB = 1024B

1MB = 1024KB

1GB = 1024MB

1TB = 1024GB

1PB = 1024TB

二、java的8种基本数据类型

boolean老师说有4个字节,目前不清楚。

三、符号位

  • 用0表示正数、1表示负数。

  • 二进制的最高位/最左边的位是符号位

  • 符号位是针对byte,short,int,long,float,double这些类型来说的。

四、原码、反码、补码

00000100 => 4
10000100 => -4
    
    4 + (-4)
     00000100
   + 10000100
    ----------
     10001000   => -8  ? 不对

因为我们不仅仅要表示数字,还得考虑正、负数的计算问题,所以需要设计新的规则,便于存储和计算,这个时候就提出了原码、反码、补码。

计算机的底层存储和计算都是基于补码的。规定:

  • 正数:原码、反码、补码都一样,三码合一

  • 负数:

    • 原码:最高位是1,其余位是数据位,这些数据位与其绝对值的二进制序列是一样的

    • 反码:最高位不变,其余位在原码的基础上取反(0变1,1变0)

    • 补码:在反码的基础上 + 1

正数的25:+25
    原码:00011001
    反码:00011001
    补码:00011001
    
负数的25:-25
    原码:10011001
    反码:11100110
    补码:11100111

五、基本数据类型的转换

public class Test01{
    public static void main(String[] args){
        // 自动转型/向上转型 取值范围小->取值范围大
        byte a = 1;
        short b = a;
        int c = b;
        long d = c;
        float e = d;
        double f = e;
        System.out.println(f); 结果为123
        
        byte g = 2;
        double h = g;
        System.out.println(h);
        
        //强转  取值范围大->取值范围小 
        double i = 123.123;
        float j = (float)i;
        long k = (long)j;
        int l = (int)k;
        short m = (short)l;
        byte n = (byte)m;
        System.out.println(n);
        
        //特殊点1
        //向下转型从高位开始舍弃
        byte b1 = 1;// 1会被系统默认为int类型,但1在byte的取值范围内,直接赋值
        //byte b2=128  128也会被系统默认为int类型但超过byte取值范围,报错
        //128 - int:0000,0000,0000,0000,0000,0000,1000,0000 int类型4个字节32位
        //   (byte):1000,0000 byte类型8位保留后八位
        byte b2 = (byte)128;
        System.out.println(b1);//1d
        System.out.println(b2);//-128  10000000值为-128
        
        //特殊点2
        //int i = 12345678901;//12345678901为int类型的数字字面量,但是超过了int类型的取值范围,所以报错
        
        //特殊点3:
        //long l1 = 12345678901;//12345678901为int类型的数字字面量,但是超过了int类型的取值范围,所以报错
        long l2 = 12345678901L;//12345678901L为long类型的数字字面量,该数字没有超过long类型的取值范围,所以会不会报错
        
        //特殊点4:
        float f1 = 1;//int -> float 自动转型
        //float f2 = 1.0;//double -> float(会报错,大转小)
        
        //解决方案1
        //float f2 = (float)1.0;//1.0为double类型(64位),强转为float类型(32位)
        //解决方案2
        float f2 = 1.0f;//直接将1.0认为是float类型(32),效率更高
        
        System.out.println(f1);
        System.out.println(f2);
        
        //特殊点5
        System.out.println((int)(char)(byte)-1);//65535
        //从右往左运行    
        //-1默认int 1111,1111,1111,1111,1111,1111,1111,1111
        //int转为byte 1111,1111  从高位开始舍弃保留后8位
        //byte转为char 1111,1111,1111,1111 8位变为16位向上转型,使用符号位补,符号位为1所以补8个1
        //char转为int 0000,0000,0000,0000,1111,1111,1111,1111 16位转为32位正常应该使用符号位1补,但是char类型的取值范围没有负数,所以向上补位使用0补位
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值