文章目录
一.位运算
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.十进制转换成二进制:
- 方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。
11.二进制转换成十进制:
- 方法为:把二进制数按权展开、相加即得十进制数。
12.二进制转八进制:
- 方法为:3位二进制数按权展开相加得到1位八进制数。(注意事项,3位二进制转成八进制是从右到左开始转换,不足时补0)。
13.八进制转成二进制:
- 方法为:八进制数通过除2取余法,得到二进制数,对每个八进制为3个二进制,不足时在最左边补零。
14.二进制转十六进制:
- 方法为:与二进制转八进制方法近似,八进制是取三合一,十六进制是取四合一。(注意事项,4位二进制转成十六进制是从右到左开始转换,不足时补0)。
15.十六进制转二进制:
- 方法为:十六进制数通过除2取余法,得到二进制数,对每个十六进制为4个二进制,不足时在最左边补零。
16.十进制与八进制与十六进制之间的转换:
- 十进制转八进制或者十六进制有两种方法
第一:间接法—把十进制转成二进制,然后再由二进制转成八进制或者十六进制。这里不再做图片用法解释。
第二:直接法—把十进制转八进制或者十六进制按照除8或者16取余,直到商为0为止。
17.八进制或者十六进制转成十进制:
- 方法为:把八进制、十六进制数按权展开、相加即得十进制数。
进制转换图片从百度收集起来的,可参阅进制转换 查看