Skip to content

Latest commit

 

History

History
131 lines (94 loc) · 3.98 KB

23.基本数据类型与进制转换.md

File metadata and controls

131 lines (94 loc) · 3.98 KB

#23 基本数据类型与进制转换

有些东西看起来很简单,其实深不可测 :)

功力不够,以后慢慢完善!

##比特与字节

在计算机内部,任何数据都是以01的方式存储和传输的,每一个0或1占用的存储空间成为比特(也称位元),英文名为Bit。比特是信息的最小单元,不可分割。

**字节(Byte)**是计算机的最小计量单位。1字节=8比特(即1Byte=8Bit)。

1Byte = 8Bit
1KB = 1KByte = 1024Bit
1MB = 1024kB
1GB = 1024MB
1TG = 1024GB

基本数据类型

byte

byte也就是字节,占用8个位元,可以容纳2^8=256个二进制表示(00000000 ~ 11111111)。

同时,byte也是Java整数类型之一。以byte的第一个位元用于表示整数符号,当为1时则表示负数,0则表示整数。byte的取值范围为:-2^7 - 2^7-1(即-128至127),边界如下:

-128      ->  -1        ->  0        ->  127
10000000  ->  11111111  ->  00000000 ->  01111111     
byte i = (byte) 0b10000000;
byte j = (byte) 0b11111111;
byte m = (byte) 0b00000000;
byte n = (byte) 0b01111111;

System.out.println(i);     // -128
System.out.println(j);     // -1
System.out.println(m);     // 0
System.out.println(n);     // 127

short

short,有符号整数,占用2个字节(16个位元),容纳空间为2^16=65513。以第一个位元为符号表示位,short的取值范围为:-2^15 - 2^15-1(即-32768到32767),边界如下:

-32768            ->  -1                 ->  0                 -> 32767
1000000000000000  ->  1111111111111111   ->  0000000000000000  -> 0111111111111111
short i = (short) 0b1000000000000000;
short j = (short) 0b1111111111111111;
short m = (short) 0b0000000000000000;
short n = (short) 0b0111111111111111;

System.out.println(i);  // -32768
System.out.println(j);  // -1
System.out.println(m);  // 0
System.out.println(n);  // 32767

int

int,有符号整数,占用4个字节(32个位元),容纳空间为2^32。与byte和short类似,第一个位元表示整数符号,int的取值范围为:最小值-2147483648(-2^31),最大值2147483647(2^31-1)。

int i = (int) 0b10000000000000000000000000000000;
int j = (int) 0b11111111111111111111111111111111;
int m = (int) 0b00000000000000000000000000000000;
int n = (int) 0b01111111111111111111111111111111;

System.out.println(i); // -2147483648
System.out.println(j); // -1
System.out.println(m); // 0
System.out.println(n); // 2147483647

long

long,有符号整数,占用8个字节(64个位元),容纳空间为2^64。第一个位元表示整数符号,取值范围为:-2^63至2^63-1。

long i = (long) 0b1000000000000000000000000000000000000000000000000000000000000000L;
long j = (long) 0b1111111111111111111111111111111111111111111111111111111111111111L;
long m = (long) 0b0000000000000000000000000000000000000000000000000000000000000000L;
long n = (long) 0b0111111111111111111111111111111111111111111111111111111111111111L;

System.out.println(i); // -9223372036854775808
System.out.println(j); // -1
System.out.println(m); // 0
System.out.println(n); // 9223372036854775807

char

一个char占两个字节(16个位元),char用于表示一个字符,容纳空间为2^16=65535。char实际上对应的是unicode码,例如“严”字的unicode编码为20005,则:

System.out.println((char) 20005); // 严
System.out.println((char) 0b0100111000100101); // 严

有些内容不知道怎么描述,功力不够撒。哈哈!

进制转换

由于二进制不利于书写和阅读,所以一般情况下都会使用十六进制

byte[]转十六进制

byte[]转二进制表示

编码 vs 解码

getbytes();
getbytes(encoding);
new String(bytes);
new String(bytes,encoding);

字符流 vs 字节流

字符流:与对应编码相关 char数组

字节流:与编码无关 byte数组

参考资料