java基本数据类型长度详解

java基本数据类型

基础知识

参考资料:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

机器数和真值

机器数

一个数在计算机中的二进制表示形式,叫做这个数的机器数
机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1
例如:
dec +3 = bit 00000011
dec -3 = bit 10000011

真值

将带符号位的机器数对应的真正数值称为机器数的真值
例如:
bit 00000011 真值 bit + 0000011 真值 dec +3(最高位代表符号位)
bit 10000011 真值 bit - 0000011 真值 dec -3(最高位代表符号位)

源码,返码,补码

机器存储一个具体数字的编码方式

源码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值
例如:
dec +3 源码 bit 00000011 = bit +|0000011| = bit 00000011 = +|3| = dec +3
dec -3 源码 bit 10000011 = bit -|0000011| = bit 10000011 = -|3| = dec -3

反码

正数的反码是其本身
负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
例如:
dec -3 源码 bit 10000011 符号位布标 bit -0000011 取反 bit -1111100 = bit 11111100

补码

负数以补码的形式存储在计算机中

正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
计算规则: 第一步取x的绝对值,第二步计算x的二进制,第三步对二进制取反,最后在加1
例如:
dec -3 源码 bit 10000011 符号位不变 bit -0000011 取反 bit - 1111100 +1 = bit 11111101
dec -3 = |dec -3| = dec 3 = bit 00000011 取反 bit 11111100 +1 bit 11111101

Java基础数据类型字节数

1 bit (一个字节) : 0/1 二进制数据
1 byte = 8 bit
1 Byte = 1 byte = 8 bit
1 Short = 2 byte = 16 bit
1 Integer = 4 byte = 32 bit
1 Long = 8 byte = 64 bit
1 Character = 2 byte = 16 bit
1 Float = 4 byte = 32 bit
1 Double = 8 byte = 64 bit
Boolean = false(没有)


基础数据类型范围

byte

byte:-128 ~ 127 = [10000000 ~ 00000001]
-128: |128| = bit 10000000 = bit 01111111 = bit 1000000
127: bit 011111111

Short

Short:
[0x8000 ~ 0x7fff] = [-215 ~ 215] = [-32768 ~ 32767]
[1000000000000000 ~ 111111111111111]

Integer

Integer:
[0x80000000 ~ 0x7fffffff] = [-2^31 ~ 2^31] = [-2147483648 ~ 2147483647] = 21亿
[10000000000000000000000000000000 ~ 1111111111111111111111111111111]

Long

[0x8000000000000000L ~ 0x7fffffffffffffffL] = [-263 ~ 263]
[-9223372036854775808 ~ 9,223,372,036,854,775,807] = 10^18

Character

‘\u0000’ ~ ‘\uffff’

常见操作

byte转换成int

&0xff
原因:

    public static void main(String[] args) {
        Byte b1 = 1;//00000001
        Byte b2 = -1;//按位取反+1:00000001 -> 11111110 -> 11111111
        System.out.println(b1);//00000000-00000000-00000000-00000001
        System.out.println(b2);//11111111-11111111-11111111-11111111
        // 因为byte只有8位,转换int,只保留8位,所以与上 0xff[00000000-00000000-00000000-11111111]
        // 保留了后8位
        System.out.println((int)b1 & 0xff);//00000000-00000000-00000000-00000001
        System.out.println((int)b2 & 0xff);//00000000-00000000-00000000-11111111
    }

你可能感兴趣的:(java基础)