Java中的逻辑运算符/移位运算符简单总结
前段时间刷到了力扣关于位运算的题,这里浅浅记录一下!
1. 逻辑位运算
1.1 与 &
&:按位与进行二进制计算,规则是同为1则为1,不同为0,具体如下:
0&0=0, 0&1=0, 1&0=0, 1&1=1
要对所有的条件都进行判断操作,如a = 1 & 2,结果a = 0,也相当于求每位的进位数,如9 & 1 = 1。
注意:
还有一种相似的与逻辑运算符, &&,称为逻辑与,也称短路与,只要第一个条件不满足,后面条件就不再判断;如a = 1 > 0&& 2 < 1,结果a = false。
1.2 或 |
|:按位或二进制计算,规则是同为0则为0,否则为1,具体如下:
0&0=0, 0&1=1, 1&1=1, 1&1=1
要对所有的条件都进行判断,如a = 3|5,结果a = 7。
注意:
还有一种相似的或逻辑运算符 ||:称为逻辑或,也称短路或,仅需要其中一个条件满足即可,其它条件就不再判断,如 a = 2 > 0 || 3 > 1,结果a = true。
1.3 非
****:按位进行取反进行二进制计算,规则是1取反为0,0取反为1,如37 = -38,具体计算如下:
在Java中,int 占四个字节,一个字节占8bit位,即32位,32bit.
37转为二进制是:100101.
计算机保存的都是补码,37是正数,他的原码,反码,补码都是一样的;
37在计算机中的补码:
00000000 00000000 00000000 00100101
~37的计算:
A.求37在计算中补码的相反码(不是反码),这里还是补码只是相反的补码
11111111 11111111 11111111 11011010
B:将相反的补码,转换为原码,由于相反码的第一个位是1,这个数是负数,负数的补码转反码 减一(-1)
11111111 11111111 11111111 11011010 -1
=
11111111 11111111 11111111 11011001
反码转原码:符号位不变,其他数相反
10000000 00000000 00000000 00100110
二进制100110十进制38
符号位不变-38
注意:
还有一种相似的运算符 !:称为逻辑非,对当前结果取反即可,具体如下:
!1 = 0, !0 = 1
如 !false = true, !true = false。
1.4 异或
符号为^, 规则是相同为0,不同为1,具体如下:
1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
相当于无进位的求和,不考虑进位,如 1 ^ 2 = 3,即001 ^ 010 = 011;19 ^ 1 = 10。
2. 移位运算符
2.1左移运算符<<
- 运算规则是:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
- 若移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了1位。
- 语法格式:需要移位的数字number << 移位的次数,如5 << 1,相当于5乘以2的1次幂,结果为10。
- 数学意义:在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
2.2 右移运算符>>
- 运算规则是:按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
- 若移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了1位。
- 语法格式:需要移位的数字number >> 移位的次数,如4 >> 1,相当于4乘以2的1次幂,结果为2。
- 数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。
2.3 无符号右移 >>>
- 运算规则是:按二进制形式把所有的数字向右移动对应位移位数,低位移出(舍弃),高位的空位补符号位0,忽略了符号位扩展,即不管是正数还是负数都补0。
- 语法格式:需要移位的数字number >>> 移位的次数。
- 只是对32位和64位的值有意义。
3. 小知识
3.1 判断某二进制数n最低(右)位1或者0
- 若 n & 1 = 0,则 n二进制数n最右一位 为 0;
- 若 n & 1 = 1,则 n二进制数n最右一位 为 1;
可用于题目:判断所给数字转换为二进制数中1的个数
3.2 二进制数n最低(右)位1变为0
- n&(n−1): 二进制数n最右边为1,n-1最右边则为0;
- n>>>1 :直接对二进制数n进行无符号右移1位
3.3 不使用运算符+求两数和
- 先用异或运算进行无进位求和,即 a^b;
- 再用与运算进行处理每次进位并左移一位,即(a &b) << 1;
- 两者用异或运算求和,即(a^b) ^ ((a &b) << 1);
- 重复上述过程,直到进位为0即可;
相关文章:
Java中的逻辑运算符/移位运算符简单总结
前段时间刷到了力扣关于位运算的题,这里浅浅记录一下! 1. 逻辑位运算 1.1 与 & &:按位与进行二进制计算,规则是同为1则为1,不同为0,具体如下: 0&00, 0&10, 1&00, 1&…...
活动预告 | GAIDC 全球人工智能开发者先锋大会
大会主题——“向光而行的 AI 开发者” 2023 全球人工智能开发者先锋大会(GAIDC) 由世界人工智能大会组委会、上海市经济和信息化委员会、上海市人才工作领导小组办公室及中国(上海)自由贸易试验区临港新片区管理委员会指导&…...
【Linux系统】认识操作系统和操作系统如何进行管理以及进程相关状态
进程概念1 认识冯诺依曼体系结构1.1 冯诺依曼体系结构存储器的作用2 操作系统(Operator System,OS)2.1 OS如何进行管理3 进程3.1 OS管理进程:先描述再组织3.2 描述进程-PCB3.3 查看进程3.4 通过系统调用获取进程标识符3.5 通过系统调用创建子进程——for…...
【0基础学爬虫】爬虫基础之HTTP协议的基本原理介绍
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…...
SpringBoot 整合定时任务
注解概览 EnableScheduling 在配置类上使用,开启计划任务的支持(类上) Scheduled 来申明这是一个任务,包括cron,fixDelay,fixRate等类型(方法上,需先开启计划任务的支持) pom依赖 <parent…...
我的零分周赛:CSDN周赛第30期,成绩“0”分,天然气定单、小艺读书、买苹果、圆桌
CSDN周赛第30期,成绩“0”分,天然气定单、小艺读书、买苹果🍎、圆桌。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教…...
二、Java虚拟机的基本结构
Java虚拟机的架构1.内存结果概述2.类加载器子系统的作用3. 类加载器ClassLoader角色4.类的加载过程5.类加载器的分类1.引导类加载器(虚拟机自带的加载器)Bootstrap ClassLoader2.扩展类加载器(虚拟机自带的加载器) Extenssion ClassLoader3.应用程序类加载器(虚拟机自带的加载器…...
华为OD机试 - 用户调度(Python) | 机试题+算法思路+考点+代码解析 【2023】
用户调度 题目 在通信系统中有一个常见的问题是对用户进行不同策略的调度,会得到不同系统消耗的性能。 假设由N个待串行用户,每个用户可以使用A/B/C三种不同的调度策略。 不同的策略会消耗不同的系统资源,请你根据如下规则进行用户调度,并返回总的消耗资源数。 规则是: …...
HashMap(JDK1.8)源码+底层数据结构分析
HashMap 简介底层数据结构分析 JDK1.8 之前JDK1.8 之后 HashMap 源码分析 构造方法put 方法get 方法resize 方法 HashMap 常用方法测试 感谢 changfubai 对本文的改进做出的贡献! HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现…...
case的使用
1.x和z值 1.1.定义 x:表示不定值 z:表示高阻态,还有一种表达方式“?” 一个x/z可以用来定义十六进制(h)数的4位二进制的状态,八进制(o)数的3位,二进制&#x…...
Mac配置ITerm2
Mac配置ITerm2 install-shell-integration配置lrzsz配置zsh安装Oh-My-Zsh修改皮肤文件加载皮肤添加插件配置profiles 1.expect配置文件2.shell脚本 iterm2顶部白条闪烁 install-shell-integration 安装完成之后会有一个指示标,需要弄掉Preferences > Profiles …...
JUC并发编程(下)
✨作者:猫十二懿 ❤️🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 学习地址 写在最前 JUC并发编程(上) JUC(Java Util Concurrent)学习内容框架&…...
API接口的基础知识
API是应用程序编程接口(Application Programming Interface)的缩写,能够起到两个软件组件之间的连接器或中介的作用。此类接口往往通过一组明确的协议,来表示各种原始的请求和响应。API文档可以向开发人员展示请求和响应是如何形成…...
基于Spring Boot的教务管理系统
文章目录项目介绍主要功能截图:登录首页学生信息管理班级信息管理教师信息管理教师评价部分代码展示设计总结项目获取方式🍅 作者主页:Java韩立 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题…...
网页扫描图像并以pdf格式上传到服务器端
本文描述如何通过网页驱动扫描仪、高拍仪等图像扫描设备进行图像扫描,扫描结果经编辑修改后以pdf压缩格式上传到后台java程序中进行服务器端落盘保存。图像扫描上传如文字描述顺序所介绍,先要驱动扫描设备工作,进行纸张数据的光学扫描操作形成…...
Airbyte入门
Airbyte 后端技术栈Java 17框架:JerseyAPI: OAS3数据库:PostgreSQL单元和E2E测试:JUnit 5编排:Temporal连接器技术栈连接器可以用任何语言编写。但是,最常见的语言是:Python3.9.0Java 17前端技术…...
研究人员在野外发现大量的信息窃取者 “Stealc “的样本
一个名为Stealc的新信息窃取者正在暗网上做广告,它可能成为其他同类恶意软件的一个值得竞争的对象。 "SEKOIA在周一的一份报告中说:"威胁行为者将Stealc作为一个功能齐全、随时可用的窃取者,其开发依赖于Vidar、Raccoon、Mars和Re…...
数据结构——复杂度讲解(2)
作者:几冬雪来 时间:2023年2月22日 内容:数据结构复杂度讲解 目录 前言: 复杂度讲解(2): 1.空间复杂度是什么: 2.空间复杂度讲解: 结尾: 前言&#x…...
【LeetCode】任务调度器 [M](贪心)
621. 任务调度器 - 力扣(LeetCode) 一、题目 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间&…...
Spring代理模式——静态代理和动态代理
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
浅谈:区块链存在的三点隐患问题
上文我们讲了区块链这个话题,有读者可能会有疑问:如果说区块链技术如此完美,为什么我们现在还没有广泛地用上它呢?实际上,区块链技术还处于发展早期,还在讨论和推进当中,而区块链的技术发展也较…...
Linux Docker Compose 部署.NET+Vue+MySQL+Redis+Nginx 完整记录(亲测无坑)
写在前面:为什么用 Docker Compose?比单容器部署好在哪? 做容器化部署时,单靠docker run命令逐个启动 MySQL、Redis、后端、Nginx 容器会非常繁琐 —— 不仅要记大量命令参数,还得手动控制容器启动顺序、配置网络联动…...
SFM3304热式流量传感器嵌入式驱动开发指南
1. Sensirion SFM3304 流量传感器技术解析与嵌入式驱动开发指南Sensirion SFM3304 是一款基于热式原理的高精度、低功耗数字质量流量传感器,专为医疗呼吸设备、工业过程控制及实验室气体分析等对响应速度、零点稳定性与长期可靠性要求严苛的应用场景设计。该器件采用…...
汉字破局:AI时代的文明反攻与英语世界的“偷师”真相
汉字破局:AI时代的文明反攻与英语世界的“偷师”真相今天我们要聊的,从来不是简单的“中文VS英文”语言之争,而是一场席卷AI世界的文明维度大反攻——三千年前刻在龟甲上的甲骨文,那些横平竖直、撇捺交错的线条,正在以…...
HEX与BIN文件在单片机开发中的关键差异
单片机下载文件:HEX文件和BIN文件的区别解析1. 文件格式概述在嵌入式系统开发中,HEX和BIN是两种最常见的单片机程序下载文件格式。这两种格式在结构和使用方式上存在显著差异,直接影响着程序烧录流程和开发效率。1.1 HEX文件特性HEX文件&…...
GHelper:华硕笔记本高效性能优化完整指南
GHelper:华硕笔记本高效性能优化完整指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地址: https://g…...
FullCalendar自定义按钮实战:next/prev月份切换回调的优雅实现
1. 为什么需要自定义FullCalendar导航按钮 FullCalendar作为一款功能强大的日历组件,默认提供了prev/next按钮用于月份切换。但在实际项目中,我们经常遇到这样的需求:当用户点击切换月份按钮时,需要执行一些额外的逻辑操作。比如&…...
Ubuntu-24.04服务器磁盘扩容实战:从30GB到80GB的完整操作记录(附常见错误排查)
Ubuntu 24.04服务器磁盘扩容实战:从30GB到80GB的完整操作记录 最近在部署一套视频处理集群时,遇到了一个典型问题:某台运行Ubuntu 24.04 LTS的服务器在持续写入4K视频素材时,根分区突然爆满。这台当初只分配了30GB磁盘的服务器&am…...
解锁你的音乐收藏:NCM格式转换全攻略
解锁你的音乐收藏:NCM格式转换全攻略 【免费下载链接】ncmdump ncmdump - 网易云音乐NCM转换 项目地址: https://gitcode.com/gh_mirrors/ncmdu/ncmdump 你是否曾遇到过这样的烦恼?从音乐平台下载的歌曲只能在特定应用中播放,换了设备…...
GitOps实战:用ArgoCD监控GitLab仓库,实现K8s部署的“无人值守”与一键回滚
GitOps实战:ArgoCD与GitLab深度整合的自动化部署与回滚策略 1. GitOps核心价值:从理论到实践 在云原生技术快速发展的今天,GitOps已成为现代DevOps实践中不可或缺的一环。与传统CI/CD流程相比,GitOps将Git仓库作为唯一可信源&…...
