一、十进制和二进制的由来
十进制是中国的基础系统。“逢十进一”
进位制是人为计数和运算方便而约束的计数系统。
二进制:“逢二进一”
二、进制转换
十进制:10个数,0-9,十进一
二进制:2个数,0、1,二进一
位权:一个数码在不同的位置上所代表的值不同
例如: 10进制 - 83296
10进制:
十进制转换为二进制:采用短除2,直到除不开,得到余数,从下往上数即得到十进制对应的二进制。
二进制转换为十进制:采用权位乘以2,相加的和即为二进制对应的十进制。
三、位运算
二进制的位运算:
1》& 与运算 例如:6&3=2
2》| 或运算
3》^ 异或运算
4》~ 反码
5》<< 左移
6》>> 右移 例如:3>>1 = 1 即3/2=1
7》>>>无符号右移 例如:3>>>1 = 1 即3/2=1
我们分别讲解每一个操作:
1》按位与 &
规则:两位全为1,结果才为1
例如:51&5 即0011 0011 & 0000 0101 ,因此51&5 = 1
特殊用法:
1》清零 。如果想将一个单元清零,即使其全部二进制为0,只要与一个各位都为零的数值相与,结果为零
2》取一个数中指定位。找一个数,对应X要取的位,该数的对应位为1,其余位为0,此数与X进行“与运算”可以得到X中的指定位
2》按位或 |
规则:只要有一个为1,结果就为1
特殊用途:
1》常用来对一个数据的某些位置1。找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1
3》异或运算^
规则:两个相应位为“异”(值不同),则该位结果为1,否则为0
特殊用途:
1》使特定位翻转。找一个数,对应X要翻转的各位,该数的对应位为1,其余位为0,此数与X对应位异或即可
2》与0相异或,保留原值
1.借助第三个变量来实现
C=A ; A=B ; B=C ;
2.利用加减法实现两个变量的交换
A=A+B ; B=A-B ; A=A-B
3.用位异或运算来实现,也是效率最高
原理:利用一个数异或本身等于0和异或运算符合交换律
如:A=A^B ; B=A^B ;A=A^B
4》取反运算 ~
规则:对一个二进制数按位取反,即将0变1,1变0
5》左移运算 <<
规则:将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2
6》右移运算 >>
规则:将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
7》无符号右移运算 >>>
规则:各个位向右移指定的位数。右移后左边空出的位用0来填充。移出右边的位被丢弃。
8》负数以其正值的补码形式表示
原码:一个整数按照绝对值大小转换成的二进制数称为原码。
反码:将二进制数按位取反,所得的新二进制数称为原二进制的反码。
补码:反码加1称为补码
四、Java内置的进制转换
1》十进制转为其他进制
转为二进制:Integer.toBinaryString(112);
转为十六进制:Integer.toHexString(112);
转为八进制:Integer.toOctalString(112);
2》其他进制转为十进制
二进制转为十进制:Integer.parseInt("111001",2);
八进制转为十进制:Integer.parseInt("27",8);
十六进制转为十进制:Integer.parseInt("A8",16);
五、Java中的进制
1》Java中的数据类型
1》int数据类型:byte(8bit ,-128~127)、short(16bit)、int(32bit)、long(64bit)
2》float数据类型:单精度(32bit float)、双精度(64bit double)
3》boolean类型变量的取值有:true、false
4》char数据类型有:unicode字符,16位
2》对应的类类型
Integer、Float、Boolean、Character、Double、Short、Byte、Long
3》数据类型转化字节
小端法(Little-Endian)
低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端
大端法(Big-Endian)
高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端
4》字符串转化为字节
String s;
byte[ ] bs = s.getBytes();
字节数组如何转化为字符串
Byte[ ] bs = new byte[int];
String s = new String(bs);
或:String s = new String(bs,encode);//encode指编码方式