在Java中一共有8种基本数据类型,其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型和1种用于表示真值的boolean类型。(一个字节等于8个bit)
类型 | 字节数 | bit(位)数 | 取值范围 | 备注 | |
---|---|---|---|---|---|
整型 | int | 4字节 | 4*8 | ||
short | 2字节 | 2*8 | -32768~32767 | ||
long | 8字节 | 8*8 | |||
byte | 1字节 | 1*8 | -128~127 | ||
浮点型 | float | 4字节 | 4*8 | float类型的数值有一个后缀F(例如:3.14F) | |
double | 8字节 | 8*8 | 没有后缀F的浮点数值(如3.14)默认为double类型 | ||
char型 | char | 2字节 | 2*8 | ||
boolean型 | boolean | 1字节 | 1*8 | false、true |
二进制是计算技术中普遍采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”
注:这里以1个字节(8位)举栗子java
在计算机中表示的带符号的二进制数称为机器数
* [+27] 的二进制是 [ 0001 1011 ]
原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增长了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其他位表示数值的大小。 原码也是机器数的一种表示方式。
* [+10] = [ 0000 1010 ] * [-10] = [ 1000 1010 ]
由于第一位是符号位,因此机器数的形式值就不等于真正的数值。例如上面的有符号数 10001010,其最高位1表明负,其真正数值是 -10 而不是形式值138(10001010转换成十进制等于138)。因此,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。
* [+10] = [ 0000 1010 ] ,真值 = [ +000 1010 ] = +10 * [-10] = [ 1000 0001 ] ,真值 = [ –000 1010 ] = –10
正数的反码与其原码相同;
负数的反码是在其原码的基础上, 符号位不变,其他各个位取反.
* [+10] 原码 = [ 0000 1010 ] 反码 = [ 0000 1010 ] * [-10] 原码 = [ 1000 1010 ] 反码 = [ 1111 0101 ]
正数的补码与其原码相同;
负数补码为其绝对值各位取反加1;
注:java中是以补码的方式显示内容算法
* [+10] 原码 = [ 0000 1010 ] 补码 = [ 0000 1010 ] * [-10] 原码 = [ 1000 1010 ] 补码 = [ 1111 0110 ] * [-10]的补码算法: 原码 1 0 0 0 1 0 1 0 反码 1 1 1 1 0 1 0 1 -------------------- +1 补码 1 1 1 1 0 1 1 0
正整数的原码、反码和补码都同样;编码
负数部分:spa
- 原码和反码的相互转换:符号位不变,数值位按位取反
- 原码和补码的相互转换:负数补码为其绝对值各位取反加1;
补码求原码:code
- 若是补码的符号位为“0”,表示是一个正数,因此补码就是该数的原码。
- 若是补码的符号位为“1”,表示是一个负数,求原码的操做能够是:符号位为1,其他各位取反,而后再整个数加1。
注:这里以1个字节(8位)举栗子it
[8]补码 0 0 0 0 1 0 0 0 [2]补码 0 0 0 0 0 0 1 0 + --------------------------- 0 0 0 0 1 0 1 0 得出的二进制为补码,转原码后转十进制,的 10
1. 转换 (-3) + (-2) = -5 2. 求 -3 -2 的补码 [-3]补码 1 1 1 1 1 1 0 1 [-2]补码 1 1 1 1 1 1 1 0 + --------------------------- 1 1 1 1 1 1 0 1 1 3.算出来的是[补码] 可是溢出了,由于1字节只有8位,则截取8位 后往前截取 1 1 1 1 1 0 1 1 1 0 0 0 0 1 0 1 4.[补码转原码] --------------------------- 1 0 0 0 0 1 0 1 = -5
[-127] 1 0 0 0 0 0 0 1 [-3] 1 1 1 1 0 1 1 0 + --------------------------- 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1.[补码转原码] 正数的补码=原码 --------------------------- 0 1 1 1 0 1 1 1 = 119