进制转换和位运算的详解

一.位运算

1:按位与 &

—>两位全为1,结果才为1

//例:
0&0=0;0&1=0;1&0=0;1&1=1;
//在例如:
51&5 -->0011 0011 & 0000 0101 =0000 0001;
//二转十:
1*2^0=1;51&5=1;
/*特殊用法 :
	(1)清0。如果想将一个单元清0,即使其全部二进制为0,只要与一个各位都为0的数值相与,结果为0。
	(2)取一个数中指定位--->例:X=10101110,取X的低4位,用X & 0000 1111 = 0000 1110即可得到。
	 方法:找一个数,对应X要取得位,该数的对应位为1,其余位为0,次数与X进行 "与运算" 可以得到X的指定位。
*/ 

2:按位或 |

–>只要有一个为1,结果就为1

//例:
0|0=0;0|1=1;1|0=1;1|1=1;
//在例如:
51|5 -->0011 0011 | 0000 0101 =0011 0111;
//二转十:
1*2^5+1*2^4+1*2^2+1*2^1+1*2^0=55;51|5=55;
 /*特殊用法:
	(1)常用来对一个数据的某些位,置1
 	例:将X=1010 0000的低4位,置1,用X | 0000 1111=1010 1111即可得到
	方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为0。次数与X相或可使X中的某些位,置1。
*/ 

3:异或运算^

–>两个相应位为 “异” (值不同),则该位结果为1,否则为0

//例:
0^0=0;0^1=1;1^0=1;1^1=0;
//在例如:
51^5 --> 0011 0011 ^ 0000 0101 =0011 0110;
//二转十:
1*2^5+1*2^4+1*2^2+1*2^1=54;51^5=54;
 /*特殊用法:
	(1)使特定为翻转 找一个数,对面X要翻转的各位,该数的对应位为1,其余位为0,次数与X对应位,异或即可。
 	例如:X=1010 1110,使X低4位翻转,用X^0000 1111=1010 0001;	
	(2)与0相异或,保留原值
	例如:X=1010 1110,X^0000 0000=1010 1110
 两个变量交换值得方法:
 	(3):借助第三个变量来实现
 	例:C=A;A=B;B=C;
 	(4):利用加减法实现两个变量的交换
 	例:A=A+B;B=A-B;A=A-B;
 	(5):用位异或运算实现,也是效率最高的
 	原理:利用一个数异或本身等于0或异或运算符合交换率。如:A=A^B;B=A^B;A=A^B;
*/ 

4.取反运算~

–>对一个二进制按位取反,即将0变1,1变0

//例:
~1=0;~0=1;

5.左移运算<<

—>将一个运算对象的各二进制位全部左移若干位,(左边的二进制位丢弃,右边补0)

//例:2是十进制《转换为二进制位是10,右边补0,100的十进制就是1*2^2=4;
2<<1=4;
//注:若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。
//在例如:也就是说1011前面还有28位的0.不包含1,所以也可以这样得出11*2*2=44;
11(1011)<<2==44;101100=1*2^5+1*2^3+1*2^2=44;
//二转十:
1*2^5+1*2^4+1*2^2+1*2^1=54;51^5=54;
 /*特殊用法:
	(1)使特定为翻转 找一个数,对面X要翻转的各位,该数的对应位为1,其余位为0,次数与X对应位,异或即可。
 	例如:X=1010 1110,使X低4位翻转,用X^0000 1111=1010 0001;	
	(2)与0相异或,保留原值
	例如:X=1010 1110,X^0000 0000=1010 1110
 两个变量交换值得方法:
 	(3):借助第三个变量来实现
 	例:C=A;A=B;B=C;
 	(4):利用加减法实现两个变量的交换
 	例:A=A+B;B=A-B;A=A-B;
 	(5):用位异或运算实现,也是效率最高的
 	原理:利用一个数异或本身等于0或异或运算符合交换率。如:A=A^B;B=A^B;A=A^B;
*/ 

6.右移运算 >>

—>将一个数的各二进制位全部右移若干位,正数左边补0,负数左边补1,右边丢弃。操作数每移一位,相当于该数除以2。左补0 或 1得看被移数是正是负。

//例:
4>>2=1;
4(0000 0000 0000 0000 0000 0000 0000 0100)>>2 =(0000 0000 0000 0000 0000 0000 0000 0001)=1;
//也相当于4/2/2=1;正数就是移动了几位,就除以几次2;
	-14(0010)>>2=-4(1100);
//负数前面的28位全是原码的取反,就是28个1
//-14的二进制
	(1111 1111 1111 1111 1111 1111 1111 0010)<<2=(1111 1111 1111 1111 1111 1111 1100 1000)=-56

7.无符号右移运算>>>

—>各个位向右移 指定的位数。右移后左边空出的位用0来填充。移出右边的位被丢弃。

//例:
-14>>>2;
-14(1111 1111 1111 1111 1111 1111 1111 0010)>>>2 =(0011 1111 1111 1111 1111 1111 1111 1100)=1073741820;

8.负数以其正值的补码形式表示:

(1)原码:一个整数按照绝对值大小转换成的二进制数称为原码;
//14的原码:
	(0000 0000 0000 0000 0000 0000 0000 1110);
(2)反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码;
//例:14的原码取反:
	(0000 0000 0000 0000 0000 0000 0000 1110)取反得(1111 1111 1111 1111 1111 1111 1111 0001)
(3)补码:反码加1称为补码;
//例:14反码的二进制加1:
	(1111 1111 1111 1111 1111 1111 1111 0001)+1=(1111 1111 1111 1111 1111 1111 1111 0010)
//注:原本是0001,加1后变为2进一位,所以就变成了0010,-14的二进制表示是(1111 1111 1111 1111 1111 1111 1111 0010),分析:只需要该补码的原码对应的正值,然后取相反数。
(4)补码减1得到反码:
//例:反码=-14的二进制减1:
	(1111 1111 1111 1111 1111 1111 1111 0010)-1=(1111 1111 1111 1111 1111 1111 1111 0001)
(5)反码取反得到原码(即该负数的正值):
	(0000 0000 0000 0000 0000 0000 0000 1110);
(6)计算正值:按照二进制和十进制转换规则正值为:
	1*2^3+1*2^2+1*2^1=14
(7)正值取相反数就会得到二进制表示的负数。

二.进制转换

9.JAVA内置的进制转换:

JAVA内置的进制转换
进制转换为十六进制Integer.toHexString(int i);
进制转换为进制Integer.toOctalString(int i);
进制转换为进制Integer.toBinaryString(int i);
十六进制转换为进制Integer.valueOf(“FFF”, 16).toString();
进制转换为进制Integer.valueOf(“376”, 8).toString();
进制转换为进制Integer.valueOf(“0101”, 2).toString();

10.十进制转换成二进制:

  1. 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
    在这里插入图片描述

11.二进制转换成十进制:

  1. 方法为:把二进制数按权展开、相加即得十进制数。
    在这里插入图片描述

12.二进制转八进制:

  1. 方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
    在这里插入图片描述

13.八进制转成二进制:

  1. 方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
    在这里插入图片描述

14.二进制转十六进制:

  1. 方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
    在这里插入图片描述

15.十六进制转二进制:

  1. 方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
    在这里插入图片描述

16.十进制与八进制与十六进制之间的转换:

  1. 十进制转八进制或者十六进制有两种方法
    第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。
    第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。
    在这里插入图片描述

17.八进制或者十六进制转成十进制:

  1. 方法为:把八进制、十六进制数按权展开、相加即得十进制数。
    在这里插入图片描述
    进制转换图片从百度收集起来的,可参阅进制转换 查看
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值