目录
-
JAVA基本数据类型
类型 | 数据类型 | 位数 | 默认值 | 取值范围 | 举例说明 |
布尔型
|
boolean(布尔值)
|
8
|
false
|
true、false
|
boolean b = true;
|
字符型
|
char(字符)
|
16
|
空
|
0 - 2^16-1
|
char c = 'a';
|
整型
|
byte(位)
|
8
|
0
|
-2^7 - 2^7-1
|
byte b = 8;
|
short(短整数)
|
16
|
0
|
-2^15 - 2^15-1
|
short s = 8;
| |
int(整数)
|
32
|
0
|
-2^31 - 2^31-1
|
int i = 8;
| |
long(长整数)
|
64
|
0
|
-2^63 - 2^63-1
|
long l = 8l;
| |
浮点型
|
float(单精度)
|
32
|
0.0
|
-2^31 - 2^31-1
|
float f = 8.0f;
|
double(双精度)
|
64
|
0.0
|
-2^63 - 2^63-1
|
double d = 8.0d;
|
-
计算机存储容量的计量单位
在我们了解以上4类8种java基本类型之前,我们还需要知道一些基本的计算机信息技术用于存储容量的计量单位:,
通常情况下,把B称为字
节
、b称为字位
、
KB称为千字节
、MB称为兆字节
、GB称为吉字节, 1字节(Byte)=8字位=8个二进制数;1字位(bit)=1个二进制数。
1B=8b
1KB=1024B
1MB=1024KB
1GB=1024MB。 位 bit 存放一位二进制数,即 0 或 1,最小的存储单位。
-
原码、反码、补码
在了解了以上存储容量的计量单位后,我们接下来了解下计算机原理中的原码、反码、补码。计算机中的数据其本质是以二进制存储,每位的取值为0、1,有符号数的最高位表示符号位,'1'表示负数,'0'表示整数。为了简化计算机运算的设计,计算机对于正整数的加减运算仅支持加法运算,减法会转换成加法进行计算(补码的形式存储数据)。
原码、反码、补码
:正整数的原码、反码、补码三码是一致的。负数的情况如下,
原码: 是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制;
反码: 符号位为1不变,其余各位为该数绝对值的原码按位取反1变0、0变1(例如-2反码 1111 1110);
补码: 负数的补码是在其原码的基础上, 符号位为1不变, 其余各位取反, 最后+1,即在反码的基础上+1。
例如 -2原码 :
1000 0001
-2反码 : 1111 1110
-2补码 : 1111 1111
-128的由来:8位有符号整数的取值范围是-128~127(
-2^7 - 2^7-1),-128的是怎么来的呢?因为8位二进制的最高高位是符号位,取值范围为1111 1111~0111 1111即[-127~-0,0~127]。由于有2个0(1000 0000,0000 0000),且有由于计算机的最高位代表符号位、数据存储形式为补码,故用1000 0000代表-128。
补码计算的原理:计算机是以补码的形式存储数据然后计算,补码的概念正如我们如上所说原码①按位取反②再加一,那么问题来了,计算机为什么这么计算补码,原理如何?其实此处的计算利用了数据溢出,高位进位舍弃高位的原理。举个例子
例如钟表,9点-3点=6点,9点+9点=6点;此处12是模,3、9互补,-3和+9(12-3)可得到相同结果。
例如2位数的计算:数字90-30=60,90+70=160(2位数计算故需舍弃最高位1,结果为60);此时100位模,-30,70(99-30+1)互补。
计算机对于减数的计算其实跟上面的例子一样只不过二进制的模不同,8位有符号二进制的模 1111 1111 +1 即 1 0000 0000(相当于例子中2位数计算的模为99+1=100);既然我们找到了8位二进制的模,那么负整数的补码就是
“模-原码的绝对值”,因此为1111 1111 +1 - |原码| ;
补码的补码是原码
:补码为原码①按位取反②再加一,因此①补码减一②再按位取反则可还原为原码;为何补码
①按位取反②再加一还可得到原码呢?当然补码减一再按位取反=补码
按位取反再加一。为什么呢?解答此问题前先看一道数学题:(x-y)+1 是否和 x-(y-1)一致。其实对于8位二进制的按位取反就是"模-1"即1111 1111
减去原码,如果把1111 1111代表x,把y比喻成原码,是否就一目了然了。
浮点数计算:浮点数的计算要比整数的复杂的多,涉及符号位、指数位、尾数位,.......
计算机数据存储在32位和64位机器是否有区别
关于Java中存在栈中的基本数据类型,在32位机和64位机上是没有区别的, 32位和64位指的是虚拟机一次可以处理的位数 数据存储本身没有区别
比如处理long型数据,32位需要分2次处理32位高位和32位低位,而64位只需要一次
。