1、什么是进制
进制:就是进位制,规定的一种进位方法。对于任何一种进制 X ,标识在某一位上的数运算时,逢X进一。
二进制:逢2进1,用0和1表示;
八进制:逢8进1,0-7;
十进制:逢10进1,0-9;
十六进制:逢16进1,0-9,A-F(10-15);
我们默认使用的是10进制计数。
2、二进制和十进制的相互转换
- 二进制----->十进制:
- 计算公式:系数 * 基数 ^ 权次(这个公式适用于任何进制到十进制的转换)
权次:从右到左的角标,从0开始
10100010 = 0*2^0 + 1*2^1 + 0*2^2 + 0*2^3 + 0*2^4 + 1*2^5 + 0*2^6 + 1*2^7
= 0 + 2 + 0 + 0 + 0 + 32 + 0 + 128
= 162
二进制的10100010 转换为十进制为162。
- 十进制----->二进制:
- 计算公式:基数 / 要转换到的进制,直到除尽或者余数为0,然后反向排列余数得到转换后的进制数(适用于十进制转换到其他任何进制)。
十进制162转换为二进制:
162 / 2 ---- 得 81----- 余 0
81 / 2 ------得40 ------余 1
40 / 2-------得20 ------余 0
20 / 2-------得10 ------余 0
10 /2 -------得5 ------- 余 0
5 / 2 --------得2 ------- 余 1
2 / 2 --------得1 ------- 余 0
然后反向取值得到:10100010
其他进制和十进制的相互转换道理相同。
3、java常用类型能存储的大小:
计算机是使用二进制存储数据的,是已补码的形式存储的,一个字节(byte)占8位(bit),首位是表示符号位,0:正,1:负,不然计算机不知道正负。其余位数标识数值的大小,正数的补码就是原码,负数的补码是去除首位,其余位取反,然后结果加1,在变成负数。
- byte:1个字节,8位能存储 -128 ~ 127
01111111: 标识最大的正数值,10000000:标识最小的负数值。
01111111变为十进制,去除首位,其余7位运算,得到最大值127:
1111111 = 1*2^0 + 1*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6
= 1 + 2 + 4 + 8 + 16 + 32 + 64
= 127
而10000000首位为1标识负数,负数转换的时候去除首位,后面的按位取反得到反码计算结果然后加1,10000000去除首位然后取反得到1111111,转换为10进制:
1111111 = 1*2^0 + 1*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^6
= 1 + 2 + 4 + 8 + 16 + 32 + 64
= 127
= 127 + 1(首位是负数所以结果在加1)
= 128
= -128(变成负数)
所以byte能存储数值的范围是 -128 ~ 127。
- short:2个字节,16位,-32768~32767
- int:4个字节,32位, -2^31 ~ 2^31-1
- long:8个字节,64位,-2^63 ~ 2^63-1