逻辑运算符位运算的详解

本文详细介绍了Java中的位运算,包括位逻辑运算符(按位与&、或|、异或^和取反~)的概念、用法和实战案例,以及位移运算(左移<<、右移>>&gt;&gt;和无符号右移>>&gt;&gt;&gt;)。通过实例演示如何在IP地址子网掩码计算、位运算应用中使用这些技巧。
摘要由CSDN通过智能技术生成

位运算的详解

1.1位运算符概述
1.位运算概念: 位运算符主要按位对每个二进制位(bit)进行运算,其操作数和运算结果都是整数型.即只能对 byte,short,char,int,long 进行运算.
2.Java语言中位运算分为:位逻辑运算符和位移运算符两类.
3.在java当中,可以把二进制的1认为是true0认为是false,从右到左,对其数位进行逻辑运算即可。
符号名称基本用法案例
&按位进行与运算(AND)4&5 结果4
|按位进行或运算(OR)4|5结果5
~非(取反)按位进行取反运算(NOT)~4结果-5
^异或按位进行异或运算(XOR)4^5结果1
<<左位移按位左移,数值扩大2的倍数10<<1结果20
>>右位移按位右移,数值缩小2的倍数10>>2结果2
>>>无符号右移只针对正数按位右移,数值缩小2的倍数20>>1结果10
4 & 5  =  4

&   全真则真 有假则假  有0则0  全1则1

运算的是补码
0000 0100
0000 0101
____________
0000 0100
1.2位逻辑运算
1.按位与&:补码按位逐位相与,11,00
	1)参与运算的数字,低位对齐,高位不足的补0
	2)对应的二进制位同时为1, 计算结果为1,否则为0
	3)任何数与0进行按位运算,其结果都为0

	举例:4 & 5
		100
		101
		100  结果4
案例1:int x = 5,y = 12;
  	  int z = x & y;

案例2: 根据ip地址和子网掩码计算网络地址
(在dos命令行下,使用【ipconfig】命令可以查看本机ip地址和子网掩码信息)
计算方式:进行ipv4地址和子网掩码的转换为2进制,然后做与运算。
在这里插入图片描述

案例2: 解析过程
	  1.IPv4地址中的网段转换成二进制
	  2.子网掩码中的网段转换成二进制
	  3.进行&运算,11,否则为0,得到的运算结果 : 10.10.77.0
2.按位或|: 补码按位逐位相或,00,11
	1)参与运算的数字,低位对齐,高位不足的补0
	2)对应的二进制位只要有一个为1, 结果为1
	3)对应的二进制位都为0, 结果为0

	案例1 : 11|7

在这里插入图片描述

3.按位异或^:补码按位逐位异或,相同为0,不同为1
	1)参与运算的数字,低位对齐,高位不足的补0
	2)对应的二进制位相同(同时为0或同时为1),结果为0
	3)对应的二进制位不相同,结果为1

	案例1: 11^7

在这里插入图片描述

4.按位取反~: 对一个操作数进行运算,补码按位逐位取反,10,01
	注意: ~是个单目运算符,只有一个操作数
	案例1 : ~10

在这里插入图片描述

上图的结果不对
	因为计算结果的补码是个负数,需要转换成原码计算其结果,转换过程:减一再取反或者取反加一
	原码结果为: 10000000 00001011, 实际结果-11
        
~10
补码			 0000 1010
取反后的补码    1111 0101
转换为源码:    1000 1011
1.3位移运算
1.位移运算:操作数向某个方向(向左或向右)移动指定的二进制位数,运算效率高.
2. <<:按位左移:补码按位左移,高位移出(舍弃),最低位补零,移动一位扩大二倍.
	注意事项:左移会造成最高位数据溢出,导致结果错误.

	案例1: 11<<1

在这里插入图片描述

3.>>按位右移:补码按位右移,最高位补符号位,低位移出(舍弃),移动一位缩小为原来的二分之一
	注意事项:
	1)正数右移得到结果和除法一致
	2)负数右移得到结果和除法不一致,运算过程为将负数转换成对应的补码,右移,移动时高位补1,将移动后的补码结果转换成原码,得到最终结果

	案例1:
		计算11>>1

在这里插入图片描述

4.>>>无符号按位右移:补码按位右移,最高位补零,最终正数运算完成之后缩小为原来的二分之一.
	注意事项:
	1)负数不能无符号右移
	2)正数无符号右移效率高于普通按位右移

	案例1: 计算10>>>1-10>>>1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值