一、二进制的概念
计算机进制有:二进制、八进制、十六进制
进制的基本特点是:每一位置上的数字必须在0-(进制-1)的范围内,也就是说二进制只能有0、1;八进制为:0-7;十六进制比较特殊为:0-9,A(10) B(11) C(12) D(13) E(14) F(15)
进制转换:
1、非十进制转换十进制:每位数字乘以进制数的权重次方,将所有位置上的结果进行求和即可。
进制的权重:一个数值,在每一位都有一个权重,权重为从右向左数,位数-1
进行转化: 举例:将二进制011转10进制为:从右向左,1*2的0次方+1*2的1一次方+0*2的2次方=3; 将八进制34转化成10进制:4*8的0次方+3*8的1次方=28
2、十进制转非十进制: 采用短除法: 用十进制数除以要转化的进制数,用本次除法的商继续进行除以要转化的进制数的除法运算,一直到商为0,保留每次除法的余数,将余数按照从后往前进行排序,即为最终转化后的数。
举例:将10进制100转化成八进制数: 十进制 100: 100/8(进制数) 商:12 余数 4 继续用上次的商12除以8:12/8 商:1 余数 4 继续用上次的商1除以8:1/8 商:0 余数 1 商为0,停止运算,将余数从后往前排序:144 得到最终转化后的八进制为144。 十进制转十六进制同理
二、位运算
优点:
(1)特定情况下,计算方便,速度快,被支持面广
(2)如果用算数方法,速度慢,逻辑复杂
2.1、按位与&
两位全为一,结果才为1
0&0=0;0&1=0;1&0=0;1&1=1;
用法:
(1)清零,如果想要将一个单元清零,即使其全部二进制位0,只要与一个各位都为零的数值相与,结果位零
(2)取一个数中指定位,找一个数,对应X要取的位,该数的对应位为1,其余为零,此数与X进行“与运算”可以得到X中的指定位
2.2、按位或|
只要有一个为1,结果就为1
0|0=0;1|0=1;0|1=1;1|1=1;
用法:常用来对一个数据的某些位置设为1,找到一个数,对应X要设置为1的位,该数的对应位为1,其余位为零,此数与X想与可使X中某些位设置为1
2.3、异或运算^
两个相应位为“异”(值不同),则改位结果为1,否则为0
0^0=0;0^1=1;1^0=1;1^1=0;
用法:
(1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为0,此数与X对应位异或即可
(2)与0相异或,保留原值
两个变量交换值
(1)借助第三个变量来实现
(2)利用加减法实现两个变量的交换
A=A+B;B=A-B;B=A-B
(3)异或运算
任意一个变量X与其自身进行异或运算,结果为0
A=A^B;B=A^B;A=A^B
2.4、取反运算~
对一个二进制数按位取反,即将0变1,1变0
~1=0;~0=1;
2.5、左移运算<<
将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)
2<<1=4
若左移时舍弃的最高位不包含1,则每左移一位,相当于该数乘以2
2.6、右移运算>>
将一个数的二进制位全部右移若干位。正数左补0,负数左补1,右边丢弃。 每右移1位,相当于除以2.
左补0还是1得看被移数是正还是负
2.7、无符号右移运算>>>
各位向右移动指定位数。右移后的左边空出位用0补。右边的位被丢弃。 与>>的不同。 >>>不管正数负数。左边只会补0; >>正数补0,负数补1
2.8、示例
原码:一个整数按照绝对值大小转换成的二进制数称为原码
反码:将二进制数按位取反,取得的新二进制数称为原二进制数的反码。
补码:反码加1称为补码
三、JDK内置的进制转换
四、JAVA中的进制
JAVA中二进制用的多吗?平时开发中“进制转换”和“位操作”用的不多,Java处理的是高层;在跨平台中用的较多,如:文件读写,数据通信(客户机(java)——0.1进制——服务器(C))。
基本类型:int型数据类型:byte(8bit -128~127)1 short(16bit)2 int(32bit)4 long(64bit)8字节float数据类型:单精度(32bit float)4字节 双精度(64bit double)boolean类型变量的取值:true false 1bitchar数据类型:Unicode字符,16位 2字节对应的类类型:Byte Short Integer Long Float Double Boolean Character
数据类型转换字节:1.大小端:
小端法:低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端大端法:高位字节排放在内存的低地址端即该位置的起始地址,低位字节排放在内存的高地址端2.字符串->字节数组:String s ; byte [] bs = s.getBytes();字节数组->字符串:byte[] bs = new byte[int]; String s = new String(bs); 或String s = new String(bs,encode); //encode指编码方式:gb2312, utf8