位运算符
数据的进制
-
常见的进制:
1.十进制:0~9,逢十进一
2.二进制:0~1,逢二进一
3.八进制:0~7,逢八进一
4.十六进制:0~16,逢十六进一 -
进制装换
1.总计算规则:
系数 * 技术的权次幂,求和
2.详细书名
系数:看到某个进制的数字,每个位置上数字是多少,系数就是多少
例如:1011系数就是:1,0,1,1
基数:1011是二进制他的基数就是2
3.权:
当前位置的一个重要层度,通过位置来体现,从右到左权越来越大。
例如:123,3的权为0,2的为1,1的为2 -
十进制转十进制
-
二进制转十进制
-
八进制转十进制
-
十六进制转十进制
。。。。。。。。。。。
-
十进制转其他进制
1.总体的方法
除基倒取余
2.详细说明
- 二进制转十进制
位运算符的概述
1、含义:
可以根据数据在计算机中,补码的表示形式,中的每一个位进行运算的符号
2、分类:
位运算符:& | ^ !
位移运算符:<< >> >>>
- 位运算符
- 1、&
1、名称:按位与
2、计算方式:将0当做false,将1当做true,对数据进行逻辑与运算
3、罗列:
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1
4、总结:全1则1,否则为0
5、例如:计算5 & 20
5的补码:
00000000 00000000 00000000 00000101
20的补码:
00000000 00000000 00000000 00010100
运算
00000000 00000000 00000000 00000101
00000000 00000000 00000000 00010100 &
00000000 00000000 00000000 00000100 结果的补码,反码,原码
结果:4
2、|
1、名称:按位或
2、总结:全0则0,否则为1
3、举例:(-5) | (-10),都使用的是四个字节
10000000 00000000 00000000 00000101 -5的原码
11111111 11111111 11111111 11111010 -5的反码
11111111 11111111 11111111 11111011 -5的补码
10000000 00000000 00000000 00001010 -10的原码
11111111 11111111 11111111 11110101 -10的反码
11111111 11111111 11111111 11110110 -10的补码
11111111 11111111 11111111 11111011 -5的补码
11111111 11111111 11111111 11110110 -10的补码 |
-----------------------------------------------------------------------------------------------------
11111111 11111111 11111111 11111111 结果的补码
11111111 11111111 11111111 11111110 结果的反码
10000000 00000000 00000000 00000001 结果的原码
结果 : -1
3、^
1、名称:按位异或
2、运算规则:相同为0, 不同为1
3、罗列:
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0
4、举例: 3 ^ 5
00000000 00000000 00000000 00000011 3的补码
00000000 00000000 00000000 00000101 5的补码 ^
------------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000110 结果的补码,原码
结果:6
5、举例:6 ^ 5
00000000 00000000 00000000 00000110 6的补码
00000000 00000000 00000000 00000101 5的补码 ^
------------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000011 结果的补码
结果: 3
6、注意事项:
一个整数,异或另一个整数两次,得到的结果还是自己本身
4、~
1、名称:按位取反
2、运算规则:遇0则1,遇1则0
3、举例:~6
00000000 00000000 00000000 00000110 6的补码 ~
------------------------------------------------------------------------------------------------
11111111 11111111 11111111 11111001 结果的补码
11111111 11111111 11111111 11111000 结果的反码
10000000 00000000 00000000 00000111 结果的原码
结果:-7
代码示例
class Demo01_普通的位运算符 {
public static void main(String[] args) {
System.out.println(5 & 20);
System.out.println(-5 | -20);
System.out.println(3 ^ 5);
System.out.println(6 ^ 5);
System.out.println(3 ^ 5 ^ 5);//3
System.out.println(~6);
}
}
面试题:
定义两个变量,交换两个变量的值
要求:不允许声明第三方变量
代码示例
class Demo02_按位异或的面试题 {
/*
定义两个变量,交换两个变量的值
要求:不允许声明第三方变量
*/
public static void main(String[] args) {
int a = 10;
int b = 20;
System.out.println(“a=” + a + “, b=” + b);
//第三种方式:面试常用
a = a ^ b;//a = 10 ^ 20
b = a ^ b;//b = 10 ^ 20 ^ 20 = 10
a = a ^ b;//a = 10 ^ 20 ^ 10 = 20
//第二种方式:效率较低
/a = a + b;
b = a - b;
a = a - b;/
//第一种方式:开发常用
/int temp = a;
a = b;
b = temp;/
System.out.println(“a=” + a + “, b=” + b);
}
}
位移运算符
1、特点:
针对整数的补码,向左或者向右移动,若干位
2、作用:
对数据进行快速的乘2或者除2
3、罗列:
<< >> >>>
4、<<
1、名称:按位左移
2、运算规则:将符号左边的数据的补码的每一个位,都向左移动若干位(符号右边的数字),最高位被顶出去了,最低位补充一个0,保证位数还是和原来一样
3、举例:66 << 3,将66的补码每一位向左移动3位
4、作用:每次向左移动1位,将原来的数据扩大为原来的2倍
012.340
123.400
000.000
00001111
00011110
5、注意事项:由于会将最高位顶出去,后面的数值位中的1,补上来,所以可能导致正数左移之后,变成负数
5、>>
1、名称:按位右移
2、运算规则:将符号左边的数据的补码的每一个位,都向右移动若干位(符号右边的数字),最高位空出来的,就需要补充(原来是几,补充几,原来是负数,就补充1,原来是正数,就补充一个0),最低位就会被顶出去
3、效果:每次向右移动一位,相当于整除2
6、>>>
1、名称:无符号右移
2、运算规则:将符号左边的数据的补码的每一个位,都向右移动若干位(符号右边的数字),最高位空出来的,需要补充,全都补充0,最低位会被顶出去
3、效果:和>>相同的
4、特点:针对正数无符号右移,可以计算正确,并且效率高于>>;针对负数的右移,计算的结果没有什么意义,因此不要针对负数使用无符号右移。
7、总结:
1、如果以后要乘以2的整数次幂(2、4、8、16、32)的时候,可以使用按位左移
2、如果以后需要除以2的整数次幂,就可以使用无符号右移