超详细的java的位运算符

位运算符

数据的进制

  • 常见的进制:
    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的整数次幂,就可以使用无符号右移

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值