Java语言学习二(Java基本数据类型)

本文深入解析计算机内部如何处理二进制数据,介绍原码、反码、补码的概念及其在解决减法运算问题上的应用。同时,概述Java语言中的八种基本数据类型,包括它们的存储方式和范围,以及数据类型越界处理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

计算机是处理逻辑运算的,计算机必须能够正确地表示数据,计算机元器件只能区分高低电平或者有无电压等电气物理体系,所以计算机每条线路同一时刻只能表示两种状态,也就是常说的计算机只能表示0/1二进制数据,而且计算机CPU只能作加法运算,其他的运算必须转化为加法运算实现。在学习Java基本数据类型前有必要学习一下计算机的基本数值。

计算机数值基础

常用的数值有二进制、八进制、十进制、十六进制等等

二进制数据中只有0和1,每位逢2进1。在计算机中二进制数据归档最高位是符号位,0代表正数,1代表负数。
比如(在此都使用一个字节表示,也就是8位二进制数据)
在这里插入图片描述
在这里插入图片描述
我们发现计算机在使用二进制进行减法运算时结果是错误的。
计算机数学家们为了解决这个问题,发明二进制数的原码,反码和补码,使用补码可以正确地将减法转化为加法,最终在计算机内部通用使用二进制的补码存储数据。

原码
最高位为符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制表示。

如:

3 的原码为0000 0011
-3的原码为1000 0011

反码
正数的反码与原码一致;

负数的反码是对原码按位取反,只是最高位(符号位)不变。

如:

3 的反码为0000 0011
-3的反码为1111 1100

补码
正数的补码与原码一致;

负数的补码是该数的反码加1。

如:

3 的补码为0000 0011
-3的补码为1111 1101

3-3=3+(-3)=(0000 0011)+ (1111 1101)=0(补码)
0的原码=0的补码=0

在这里插入图片描述
以2-2为例说明补码运算

在这里插入图片描述
结论:计算机内部数据都是以二进制的补码形式存储的

Java数据类型

任何语言都需要设计几种基本的数据类型,Java语言定义了八中基本数据类型,这八种数据类型可以存储不同长度的数据,都是以二进制的形式存储的。
|

数据类型长度
byte8位(1字节)
boolean8位(1字节)
short16位(2字节)
char16位(2字节)
int32位(4字节)
float32位 (4字节)
long64位(8字节)
double64(8字节)

在这里插入图片描述

其他数据类型大小范围与存储类似byte
boolean
最小值:-2^8
最大值:2^8-1

char || short
最小值:-2^16
最大值:2^16-1

int||float
最小值:-2^32
最大值:2^32-1

long||double
最小值:-2^64
最大值:2^64-1

在Java代码中默认的一个整数是int类型,默认一个小数是double类型
在这里插入图片描述
由于数据类型存储长度不同,在为不同数据类型赋值时需要显示地指明数据类型,如下代码
在这里插入图片描述
在这里插入图片描述
修改为显示地转化赋值
在这里插入图片描述
编译结果是正确的
那么变量b2越界,它的值是什么?
在这里插入图片描述
在这里插入图片描述
答案是-128,原因如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过上面两个图示,-128加1,顺时针跳一个位置到达-127,当-128减1顺时针跳一个位置到达+127

Java基本数据类型如果越界,按照模运算,跳到数值的另一端。

Java的基本数据类型byte,short,char,int,long存储都是相同的,根据二进制不同的位权转换为十进制,而float,double采用科学计数法存储数据,使用自然数e作为底数,包含指数部分。所以虽然存储4字节的float类型,存储数据范围远比存储8字节的long类型更广泛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值