java位运算符

SD-WAN组网案例——数据中心 阅读详情

Java 语言中的位运算符分为位逻辑运算符和位移运算符两类,下面详细介绍每类包含的运算符。

1. 位逻辑运算符

位逻辑运算符包含 4 个:&(与)、|(或)、~(非)和 ^(异或)。除了 ~(即位取反)为单目运算符外,其余都为双目运算符。表 1 中列出了它们的基本用法。

运算符含义实例结果
&按位进行与运算(AND)4 & 54
|按位进行或运算(OR)4 | 55
^按位进行异或运算(XOR)4 ^ 51
~按位进行取反运算(NOT)~ 4-5

1.1 与运算符

位与运算符为 &,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位同时为 1,那么结果才为 1,否则为 0。因此,任何数与 0 进行按位与运算,其结果都为 0。

应用:

判断奇偶性:任意数 a&1=0 为偶数,a&1=1为偶数

取低位:根据运算性质,任意数a&(1<<n)-1 得到a的低n位,代码举例如下:

    public static void main(String[] args) {
        System.err.println(Integer.toBinaryString(27)); //1011
        System.err.println(Integer.toBinaryString(11));// 11011
        System.err.println(11 & (1 << 3) - 1); //3  即011
        System.err.println(27 & (1 << 3) - 1); //3
        System.err.println(27 & (1 << 4) - 1); //11 即1101
    }

利用取低位的性质,得到另一个应用:任意数(0除外)a&(a-1)==0即表示a是2的次方数

取余:a%(2^n) = a&(1<<n-1) 注意这里的^是幂函数,仅限于除数是2的次方数如a%16=a&15

1.2 或运算符

 位或运算符为 |,其运算规则是:参与运算的数字,低位对齐,高位不足的补零。如果对应的二进制位只要有一个为 1,那么结果就为 1;如果对应的二进制位都为 0,结果才为 0。

应用:后位置1(利用的就是加粗部分的运算特性),如hashmap的tableSizeFor方法

1.3 异或运算符

位异或运算符为^,其运算规则是:参与运算的数字,低位对齐,高位不足的补零,如果对应的二进制位相同(同时为 0 或同时为 1)时,结果为 0;如果对应的二进制位不相同,结果则为 1。

特性:a ^ a = 0,a ^ 0 = a,(a ^ b) ^ c = a ^ (b ^ c)

应用:不使用临时变量,交换两个数的值

a ^= b;
b ^= a; 
a ^= b;
分析:对应这三步
a = a ^ b;
b = a ^ b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a;
a = a ^ b = (a ^ b) ^ b = (a ^ a) ^ b = b ^ 0 = b

附,该题还有其他解法如:

a = a + b;
b = a - b;
a = a - b;

1.4 取反运算符

位取反运算符为~,其运算规则是:只对一个操作数进行运算,将操作数二进制中的 1 改为 0,0 改为 1。

应用:(这里涉及到负数补码的知识)

求相反数: ~a + 1

求绝对值: a >> 31 == 0 ? a : (~a + 1)

==================================================================

2. 位移运算符

参考文章负数位运算的右移操作-C语言基础 - 十一一个人 - 博客园

首先需要了解一下原码,反码,补码的知识:原码,补码,反码_Mr_moving-优快云博客

在计算机中,数值一律用补码来表示(存储),无论是左移还是右移,都是以此为前提进行操作。

2.1 右移:

右移分为有符号右移和无符号右移(java中用>>>符号表示),区别仅在于有符号右移,符号位不移动保持不变,无符号右移,高位统一补0,所以负数会变正数

下面是有符号右移的例子

首先是 +5>>2 = 1

+5
原码 0000 …… 0101
补码 0000 …… 0101
>>2(正数右移高位补0)
补码 0000 …… 0001
原码 0000 …… 0001
= 1




然后是 -5>>2 = -2

-5
原码 1000 …… 0101
反码 1111 …… 1010 负数的反码是保留符号位不变源码取反
补码 1111 …… 1011 补码是反码加1
>>2 (负数右移高位补1)
补码 1111 …… 1110
反码 1111 …… 1101 补码转反码减1
源码 1000 … 0010 负数反码转源码保留符号位不变取反

= -2

无符号右移

-5
原码 1000 …… 0101
反码 1111 …… 1010 负数的反码是保留符号位不变源码取反
补码 1111 …… 1011 补码是反码加1
>>>2(无符号右移,高位补0)
补码 0011 …… 1110
反码 (此时符号位已经变为0了,系统会当成正数来处理,原反补码均一样)
原码 0011 …… 1110
= 这个不好说,得看操作系统的位数(在我这里int为32位,
结果为:107374182==>00111111 11111111 11111111 11111110)

2.2 左移:

左移相对于右移来说,就十分朴实无华,不在乎符号位,也就不存在无符号左移的说法,因为左移就是在低位补0

无论是有符号的正数还是负数,其左移都是在其补码的基础上面左移,而且低位都是补0。看到这里,你是否就意识到了一个问题,“如果正数的补码在左移的过程中,刚好有一个1移到了最高位,那么是否就会变成了负数呢?”嗯,这种情况确实是会发生的。负数左移到一定值的时候也会变成正。

2.3 注意事项

1. 在移位运算时,byte、short和char类型移位后的结果会变成int类型,所以一般是以32位的补码形式运算。

2. 当移位较大时,比如移动33位,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。

2.4 位移运算的应用

在计算机系统中通常是以补码的形式存在的,以16位int数据为例,其中最为特殊的就 -1的补码 , -1的补码为:1111 1111 1111 1111;通过-1>>>n可以获取(二进制)从低位到指定位n全部为1的值;同时使用-1<< m可以获取从指定位m到符号位全部为1的值;通过(-1>>>n)&(-1<< m)就可以获取二进制中指定位置(低位到高位)全部为1的int值。

==================================================================

附运算符优先级,没必要记,括号是万能的。

优先级运算符
1()、[]、{}
2!、+、-、~、++、--
3*、/、%
4+、-
5«、»、>>>
6<、<=、>、>=、instanceof
7==、!=
8&
9^
10|
11&&
12||
13?:
14=、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>=

Altium Designer 超详细入门教程 本文是一份Altium Designer新手入门教程,详细介绍了从软件基础到PCB制版的全流程。主要内容包括:软件界面介绍与工程创建方法;原理图设计中的元件放置、电气连线、标注添加等操作;PCB设计的布局布线、铺铜和DRC检查;Gerber和钻孔文件的导出方法。教程还提供了分类整理的实用快捷键表和新手避坑指南,强调原理图编译和DRC检查的重要性。通过本教程,新手可以快速掌握AD基本操作,完成简单电路板的设计与制版文件导出。 阅读详情

相关推荐

关于使用EB tresos出现无法激活的情况解决

我在安装eb studio时就是在激活方面有问题导致无法使用,下面讲解出现了什么问题以及我如何去解除的。EB安装完成时需要激活才能使用的,不然都打开或者建立不了工程,一直都是报的dns服务器错误,好的,那我改dns服务器地址。填写dns服务器地址,也可以换成别的,自己百度一下适合自己的。这是解决方案哈哈哈哈。

weixin_43673603的博客 6185

java的7种位运算符

Java的7种位运算符

yinying293的博客 6427

DenseNet训练实践

在Cifar10上训练DenseNet,复现DenseNet论文的结果是后面两篇分析工作的基础,因此本系列的第一篇,将首先讨论深度学习的训练过程中的几个方面: 1. 数据集 1.1 Cifar10数据集 Cifar10数据集有6万张32X32的图片,是一个小型的数据集,但数据的复杂度足够,下图来自DenseNet论文,可以看出,不用数据增强的话,ResNet的正确率也很难超过90%,因而足以用来验...

一蓑烟雨任平生 1万+

一篇搞定位运算——java位运算详解

java位运算详解前言一、位运算符&:按位与|:按位或~:按位非^:按位异或<<:左位移运算符>>:右位移运算符<<<:无符号右移运算符二、位运算符结合赋值操作三、位运算符常见使用(1) 公式:m*2^n = m << n(2)判断一个数n的奇偶性(3)不用临时变量交换两个数(4)取绝对值四、有趣的位运算符操作五、参考文章 前言 在日常开发中位运算不会很常用到,如果能够巧妙的使用位运算可以大量减少运行开销,优化算法。博主在

qq_42265220的博客 2万+

emir分析RC corner如何选择

power analysis阶段 RC corner的选择

weixin_61954252的博客 3596

2026款拯救者Y9000P深度学习环境配置指南

这套环境适配 2026 款拯救者 Y9000P 的 RTX5060,可直接用于 CV(图像分类、检测)、NLP 等 PyTorch 深度学习任务,GPU 利用率正常,无兼容性问题。后续复现环境时,直接按本文步骤操作即可~

大糊涂虫 2645

Java千问:Java语言位运算符详解

很多编程语言都有位运算符,Java语言也不例外。在Java语言中,提供了7种位运算符,分别是按位与(&)、按位或(|)、按位异或(^)、取反(~)、左移(<<)、带符号右移(>>)和无符号右移(>>>)。这些运算符当中,仅有~是单目运算符,其他运算符均为双目运算符。在讲解这些运算符的使用之前,必须了解一个常识,那就是:位运算符是对long、int、...

穆哥学堂--Java学习园地 5692

3.5.3以太网ETH TC8-PMA物理层测试

英文原版-OA_Automotive_Ethernet_ECU_TestSpecification_Layer_1_100BASE-T1_v3.0.pdf。PMA测试时各个测试项目所进入的测试模式不同,如TX_01对应测试模式1;TX_04对应测试模式5;例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。TX_07对应测试模式5;物理层测试主要分为两部分:IOP测试(包括链接时间,信号质量,线路诊断),PMA测试。

qq_28664971的博客 7697

算法【Java】—— 位运算

位运算总结与实战

熵减玩家 3039

使用python读取卫星测高数据并做相应的处理

5.在python处理结果如下,最大的优点就是比matlab快30-40倍。4.进行粗差的如NaN值,还有进行3倍方差进行对粗差处理。1.首先遍历卫星数据的文件,挨个读取每个数据。有问题,请各位读者及时告知,一起完善内容。3.进行下一步,筛选在研究区域的数据。4.进行按天求平均和按月求平均。2.读取数据主体代码。

爱下去更难! 1133

学Simulink--决策规划场景实例:基于Simulink的智能车辆行为决策仿真

本文基于Simulink平台构建智能车辆变道决策仿真系统,采用MOBIL算法实现"决策-规划-执行"全流程。系统包含自车动力学模型、环境感知模块(含5%噪声)、决策控制器和轨迹规划模块,通过五次多项式实现平滑变道。仿真验证了三种典型工况:正常变道(成功率100%)、邻车拒绝让行和紧急避障,各项指标均满足要求(TTC>3s,横向加速度<2m/s²,决策周期<100ms)。文章详细介绍了建模步骤、核心算法实现和参数配置方法,并提出了强化学习、多车协同等优化方向。该模型为智能

amy_mhd的博客 153

JAVA位运算符

JAVA位运算符--移位运算技巧

q992316998的博客 1160

抖音 webmssdk 签名算法解析:X-Dynosaur / X-Gnarly / X-Bogus 生成原理

它只依赖设备指纹/环境编码与随机数,与 query 内容无关,因此可以独立于 Dynosaur/Gnarly 生成。

猫敷雪 202

java位运算符详解

java位运算符详讲一、位运算符分类    java中位运算符主要有:按位与&amp;、按位或|、按位非~、按位异或^。 在使用时,需要将运算数都转换为二进制再进行运算,若为负数则使用补码表示。二、位运算符使用方式    1、按位与&amp;    使用规则:全一则一,否则为零。    eg:计算7&amp;-5的结果    第一步:byte中的二进制       7的二进制       被除数 ...

wppi的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java 位运算符

位运算符是直接操作整数二进制位的工具,主要用于底层编程和性能优化。它们包括基本位运算符(如按位取反、按位与、按位或、按位异或)和移位运算符(左移、算术右移、逻辑右移)。位运算符仅适用于整数类型(如byte、short、int、long、char),运算前会自动进行类型提升。常用应用包括判断奇偶、交换两数和取绝对值。使用位运算符时需注意运算符优先级、复合赋值运算符的隐式转换、数值问题以及不可用于BigInteger等限制。位运算符的设计初衷是保证跨平台一致性,且不适用于浮点数和布尔值。

paishishaba的博客 1488

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java位运算符怎么运算,Java 按位运算符

Java教程 - Java按位运算符按位操作符作用于其操作数的各个位。Java按位运算符可以应用于整数types:long,int,short,char,byte。按位运算符列表下表列出了所有Java按位运算符。运算符 结果~ 按位一元NOT& 按位AND| 按位或^ 按位异或>> 向...

weixin_39913648的博客 283

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java位运算符

一、Java中所支持的位运算符一共有7个 符号 说明 & 按位与。当两位同时为1时才返回1。 | 按位或。只要有一位为1即可返回1。 ~ 按位非(取反)。单目运算符,将操作数的每个位(包括符号位)全部取反。 ^ “异或”运算。当两位相同时返回0,不同时返回1。 << 左移运算符。 >> 右移运算符。 >>> ...

.... 永远年轻,永远热泪盈眶 574

Java基础(四):位运算符详解

🔥 揭秘Java位运算:7大运算符详解 + 63%性能提升秘籍,解锁底层高效编程利器!

从基础到源码解析的学习记录 2283

Java位运算符大全

所有位向右移动,高位补符号位(正数补 0,负数补 1)。处理无符号整数(Java 没有无符号类型,但可以用。:两个位都为 1 时,结果才为 1,否则为 0。:所有位向右移动,高位补 0(不考虑符号位)。:两个位有一个为 1 时,结果就为 1。:两个位不同时,结果为 1,否则为 0。:所有位取反(0→1,1→0)。:所有位向左移动,低位补 0。(任何数与 0 异或不变)。Java 使用补码表示负数,(相同数异或为 0)。

2301_81193552的博客 1389

Java 位运算符详解

Java 位运算符详解 0️⃣1️⃣

weixin_44146372的博客 2933

java按位运算符

java按位运算符(操作符)         最近在看源码时,发现一些java基础有些记不清了。今天来回忆,整理一下。         按位运算符是来操作整数基本数据类型中的单个“...

spring_zhangH的博客 694

Java基础——很少用的位运算符

前言 今天突然有一个需求用到了位运算符,然后让我好好的回忆了一下java基础,说实话我真的把位运算符的相关方法忘的死死的。所以为了纪念逝去的时光,写下了这篇基础中的基础,也算是给自己提个醒要时不时的去回去看看基础,要不然都没有进步的空间了。 正文 基础的东西基本上都是看一眼就能想起来的。比如下边这一眼。 位运算符的列表: 名称 符号 左移 << 空位补0,被移除的高位丢弃,空缺位补0。 右移 >> 被移位的二进制最高位是0,右移后,空缺位补0;最高位是1,空缺位

朗福德的博客 790

Java——位运算符

在上面的byte[]数组转String的例子中:假如我们有一个byte数组[35, 36, 37, 38, 39, 40]。如果把value的类型改成long,long类型最多可以存储64位的数字,那么位运算的大小限制就扩大了一倍,也就是,左移8位这个操作可以执行7次,即,length的大小最多为8。进行遍历^ =运算,结果是4,也就是把前面两两相等的数字都清除掉了,留下没有可以配对两两抵消的数字4。,length一旦超过4,就只能取到byte[]数组最后的4位转换之后的结果。

weixin_56039103的博客 776

java 位运算符_Java位运算符示例

Java定义了几个按位运算符,可以应用于整数类型, 如:long,int,short,char和byte。按位运算符处理位并执行逐位运算。 假设a = 60且b = 13; 采用二进制格式,它们将如下 -a = 0011 1100b = 0000 1101-----------------a&b = 0000 1100a|b = 0011 1101a^b = 0011 0001~a = ...

weixin_36487445的博客 246

java中的位运算符

java中的位运算符java中的位运算符 概述 分类 说明 左移 原理 被除数是负数的时候 右移 原理 被除数是负数的时候 无符号右移 当数是负数的时候 位与 位或 位异或 位非 衍生运算符概述Java定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型分类左移( << )、右移( >> ) 、无符号右移( >>> ) 、

SiMaXiaoChen的博客 722
上一篇: log4j2之filter
下一篇: 二叉树与二叉查找树(附java代码实现)
MrMoving
博客等级 码龄10年 54粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值