#23 基本数据类型与进制转换
有些东西看起来很简单,其实深不可测 :)
功力不够,以后慢慢完善!
##比特与字节
在计算机内部,任何数据都是以01的方式存储和传输的,每一个0或1占用的存储空间成为比特(也称位元),英文名为Bit。比特是信息的最小单元,不可分割。
**字节(Byte)**是计算机的最小计量单位。1字节=8比特(即1Byte=8Bit)。
1Byte = 8Bit
1KB = 1KByte = 1024Bit
1MB = 1024kB
1GB = 1024MB
1TG = 1024GB
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,有符号整数,占用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,有符号整数,占用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,有符号整数,占用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占两个字节(16个位元),char用于表示一个字符,容纳空间为2^16=65535。char实际上对应的是unicode码,例如“严”字的unicode编码为20005,则:
System.out.println((char) 20005); // 严
System.out.println((char) 0b0100111000100101); // 严
有些内容不知道怎么描述,功力不够撒。哈哈!
进制转换
由于二进制不利于书写和阅读,所以一般情况下都会使用十六进制
byte[]转十六进制
byte[]转二进制表示
getbytes();
getbytes(encoding);
new String(bytes);
new String(bytes,encoding);
字符流:与对应编码相关 char数组
字节流:与编码无关 byte数组