常用进制转换和JAVA特殊运算符

为了阅读源码,和编写高效率的代码,进制间的转换和特殊运算符是我们必须要熟悉和掌握的。

一、制转转换

二进制的特点就是逢二进1,在我们学习数学的时候,我们一定记过加法表,或乘法表吧,想想加法乘法表的特性,我们可以发现进制间相互转换是很容易理解的,

下面我们对常用的进制转换进行说明。

十进制加法表:

十进制乘法表: 

1.十进制二进制相互转换

二进制的特点是逢二进一,乘法就更加简单了:任何数乘以0都为0,任何数乘以1,结果都是这个数本身。

二进制加法表和乘法表:

示例:

十进制10+10运算:

将10转换为二进制:1010 

我们使用公式来看 abcde转十进制:e*2^0 + d*2^1+ c*2^2+ b*2^3+ a*2^4,任何数的0次幂都等于1

得出结果为10100 转换为十进制:0 + 0 + 4  +0 +16=20

 

十进制10*11运算:

十进制转二进制就是使用当前数除以2,拿到余数,从下往上拼接,例如:11

从下往上拼接就是:1011 ,其实我们还可以通过128 64 32 16 8 4 2 1上面十进制转二进制公式进行反推:

8+2+1=11 对应上面就是 abcd   d*2^0 +  c*2^1+  b*2^2+  a*2^3       d=1 c=0 b=1 a=1

将11转为二进制:1011

2.八进制转十进制

八进制就是逢八进一

公式:ab     a*8^1 + b*8^0

例如:12    1*8 + 2 = 10

 

3.十六进制转十进制

通过上述,我们知道十六进制就是十六进一,我们在java代码中可能会看到0x80 ,0x代表的就是16进制。

公式我们通过上述也可以推论出来:abcd    (a*16^3) + (b*16^2) + (c*16^1) + (d*16^0)

例如:3f    3*16 + 15 = 63

 

二、特殊运算符

1、逻辑运算符

&运算符【将十进制转2进制 相同位都为1才是1  否则是0,计算出结果,将结果转换成10进制】

//将十进制转2进制(十进制转2进制公式)

// 5/2 余1  2/2 余0  1/2 余1  从后往前拼接 101

// 6/2 余0  3/2 余1  1/2 余1  从后往前拼接 110

// 7/2 余1  3/2 余1  1/2 余1  从后往前拼接 111

System.out.println(Integer.toBinaryString(99)); //1100011

System.out.println(Integer.toBinaryString(100));//1100100

System.out.println(Integer.toBinaryString(5));//101

System.out.println(100&99);//96

System.out.println(99&5);//1

//&运算符   将十进制转2进制 相同位都为1才是1  否则是0

//例如: 99[110 0011]  5[000 0101]  001   结果为1

 

// 十进制转十六进制

System.out.println(Integer.toHexString(9));

//十进制转八进制

System.out.println(Integer.toOctalString(9));

//十进制转二进制

System.out.println(Integer.toBinaryString(9));

//十六进制转十进制

System.out.println(Integer.valueOf("9",16));

//八进制转十进制

System.out.println(Integer.valueOf("11",8));

//二进制转十进制

System.out.println(Integer.valueOf("1001",2));

|运算符【将十进制转二进制 相同位只要有一个为1则为1 否则为0  结果转十进制】

int a = 2;//10

int b = 3;//11

System.out.println(a|b);//11 转十进制 3

~运算符【非运算符,转二进制 为0结果为1 为1结果为0】

System.out.println(~2);//01 -3

^运算符,同为假,异为真【异或运算符 将2个数转二进制 相同位结果相同位0,不同为1  结果转十进制 】

int a = 2;//10

int b = 3;//11

System.out.println(a^b);//01 转十进制 1

2、算术运算符

<<【左移运算符】低位补0 负数补1

int i = 5;//二进制101

i = i << 2; //10100 

//正数右边第一位补0,负数补1,等于乘于2的n次方,十进制位是20

>> 【右移运算符】高位补0 负数补1

int i = 5;//二进制101

i = i >> 2; //1

//右移两位就是把101前面填充2个0,正数左边第一位补0,负数补1,等于除于2的n次方,结果为1

>>>【无符号右移运算符】不管正、负 都在高位补0

int i = 5;//二进制101

i = i >>> 2; //1

//无符号右移是高位补0(从左到右 左为高位),移多少位补多少个0。

//负数无符号右移

//-5的二进制是5的二进制取反再加1(补码),5的二进制也就是0000 0000 0000 0000 0000 0000 0000 0101,取反后加1为1111 1111 1111 1111 1111 1111 1111 1011,右移三位0001 1111 1111 1111 1111 1111 1111 1111

 

 

 

 

参考博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值