【JAVA基础】JAVA基本数据类型


JAVA基础 基本数据类型

  • xx.java ----源文件,人能看懂的文件
  • 利用javac命令,将.java文件变成.class文件,也就是二进制字节码文件,让计算机能看懂
  • 无论是哪个类型的文件,都是以文件的形式存储在磁盘中

计算机存储与处理流程

  • 通过java命令,将.class文件编译进计算机内存当中

数据类型

定义:数据在内存中的存储形式

强数据类型语言:C C++ java,定义变量时有不同具体的变量名称

int a = 10;
float b = 10.11;

弱数据类型语言:js python,定义变量时变量名称相同

var a = 10;
var b = 10.11;

区别:对于强数据类型语言,必须清楚数据在内存中的存储形式和大小(int a = 10和byte a = 10不一样)

​ 对于弱数据类型语言,只需要考虑数据存储,不需要考虑存在形式

  1. 基本数据类型

    • 整形:byte short int long

      byte:8bit 1bit符号位 7bit数值位

      short:16bit 1bit符号位 15bit数值位

      int:32bit 1bit符号位 31bit数值位

      long:64bit 1bit符号位 63bit数值位

    • 浮点型:float double(阶位是小数点存在的位置)

      float:32bit 1bit符号位 8bit阶位 23bit数值位

      double:64bit 1bit符号位 11bit阶位 52bit数值位

    • 布尔型:boolean

    • 字符型:char

  2. 引用数据类型

计算机对整型数据的存储方式

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

  • byte大小是8bit(1字节)

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

    例子:

    byte a = 10; 00001010(源码)

    byte b = -10; 10001010(源码)

    int a = 10; 00000000000000000000000000001010(源码)

    short b = -12; 100000000001100(源码)

十进制与二进制转换

  1. 除余法

除余法

  1. 直接写
1248163264128256512102420484096
20212223242526272829210211212

例如:十进制27=16+8+2+1=24+23+21+20 转换为二进制就是11011,哪位有写就在哪位写1

二进制加减运算

byte a = 10; 00001010(源码)

byte b = -10; 10001010(源码)

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

错误示范

在这里插入图片描述

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

  • 反码:正数的反码 = 源码

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

    a:反码 00001010(反码)

    b:反码 11110101(反码)

在这里插入图片描述

转换为源码为:10000000也就是-0,计算机存储数值类型肯定不是存储反码,因为反码存在+/-0的问题

  • 补码:正数的补码 = 反码 = 源码

    ​ 负数的补码 = 在反码的基础上末尾+1

    a:补码 00001010(反码)

    b:补码 11110110(反码)

    在这里插入图片描述
    因为数据类型在内存中的存储大小,此时需要从右往左一次截取数据,所以结果最终为a+b = 00000000 -----> 0

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

经典面试题 127+1 = -128

// 为什么 127+1是-128
        byte a = 127;
        byte b = 1;
        byte c = (byte) (a+b);
        System.out.println(c);

结果为:在这里插入图片描述
为什么??——数据越界问题

因为byte类型的范围是:-128~127,此时如果127+1还在byte类型的表示范围内,那只能是等于-128

// byte类型 8bit   最高位是符号位  数值位只占有7位
// byte类型中: 00000000   00000001   00000010   00000011...01111111
//             0          1          2          3          127
//-1    10000001(源码)----->11111110(反码)----->11111111(补码)
//-2    10000010(源码)----->11111101(反码)----->11111110(补码)
//-3    10000011(源码)----->11111100(反码)----->11111101(补码)
//-4    10000100(源码)----->11111011(反码)----->11111100(补码)
// ...
//-128  10000000(源码)----->11111111(反码)----->00000000(补码)
//所以存在的问题是数据越界的问题

自动类型转换

大碗装小碗

例1

byte a = 127;
byte b = 1;
byte c = (byte)(a+b);
System.out.println(a+b);  // 输出时会自动转型为int类型,所以不会越界,输出值为128
System.out.println(c);  //这里因为c的类型为byte,所以输出为-128

上面的例子中,System.out.println(a+b);就是自动类型转换。

自动类型转换具体细节如下图:

在这里插入图片描述

强制类型转换

小碗装大碗,但是绝大多数情况会造成精度丢失
例2

byte a = 127;
short b = a;
// byte c = b; 报错 需要进行强制类型转换
byte c = (byte) b; // 进行强制类型转换之后会造成精度丢失
                   // short  数值位16bit
                   // byte   数值位7bit
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值