java是一种强类型语言.这就意味着必须为每一个变量声明一种类型.在java中,一共有8种基本类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型.
整型用于表示没有小数部分点的数值,它允许是负数.java提供了4种整型,具体内容如下表所示:
数据类型 | 存储需求 | 最小值 | 最大值 |
---|---|---|---|
Byte | 1字节 | -2^7=-128 | 2^7-1=127 |
Short | 2字节 | -2^15=-32768 | 2^15-1=32767 |
Int | 4字节 | -2^31=-2147483648 | 2^31=2147483647 |
Long | 8字节 | -2^63=-9223372036854775808 | 2^63-1=9223372036854775807 |
浮点类型用于表示有小数部分的数值.在java中有两种浮点类型,具体内容图下表所示:
数据类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约±3.40282347E+38F(有效位数为6-7位) |
double | 8字节 | 大约±1.79769313486231570E+308(有效位数为15位) |
char类型原本用于表示单个字符.不过,现在情况已经有所变化.如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值.(Unicode:UTF-16)
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件.整型值和布尔值之间不能进行互相转换.(在c或c++中可以)
在数据类型的最后我们讲解一下在底层浮点类型是怎样存储的:
首先我们要了解的是浮点类型float和double在电脑中的处理是采用IEEE754标准来存储的,具体怎样存储表示如下:
先看一下浮点表示标准形式:SGL = (-1)^SIGN * 1.MANTISSA * 2^(EXPONENT-127) (可以当成一个公式来记!)
float变量32位,格式如下:
s(符号位) e(阶码) f(尾码)
1 - 11111111 - 11111111111111111111111
s:1bit e:8bit f:23bit
double变量64位,格式如下:
s(符号位) e(阶码) f(尾码)
1 - 11111111111 - 1111111111111111111111111111111111111111111111111111
s:1bit e:11bit f:52bit
位运算符
处理整型类型时,可以直接对组成整型数值的各个位完成操作.这意味着可以用掩码技术得到整数中的各个位.位运算符包括:
(A位60,B为13)
操作符 | 描述 | 例子 |
---|---|---|
& | 如果相对应位都是1,则结果为1,否则为0 | (A&B),得到12,即0000 1100 |
| | 如果相对应位都是0,则结果为0,否则为1 | (A | B)得到61,即 0011 1101 |
^ | 如果相对应位值相同,则结果为0,否则为1 | (A ^ B)得到49,即 0011 0001 |
〜 | 按位取反运算符翻转操作数的每一位,即0变成1,1变成0。 | (〜A)得到-61,即1100 0011 |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A << 2得到240,即 1111 0000 |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2得到15即 1111 |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A>>>2得到15即0000 1111 |