当前位置: 首页 > news >正文

​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​

说明

所有的位运算符操作的都是二进制,而不是我们日常生活中常用的十进制。

在系统中,一个字节占8位。 

按位与运算符(&)

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:如果两个二进制数的同一个位数上的数都为1,则当前位为1,否则为0.

示例:0&0=0;  0&1=0;  

按位或运算符(|)

参加运算的两个对象,按二进制位进行“或”运算。

运算规则:如果两个二进制数的同一个位数上的数有一个不为0则当前位为1,否则为0.

示例:0|0=0;  0|1=1;  1|0=1;   1|1=1;

取反运算符(~)

参加运算的一个数据,按二进制位进行“取反”运算。

示例:~1=0;  ~0=1;

异或运算符(^)

用于比较两个二进制数的相应位。在执行按位异或运算时,如果两个二进制数的相应位都为1或两个二进制数的相应位都为0,则返回 0;如果两个二进制数的相应位其中一个为1,另一个为0,则返回 1;

示例:10^15= 5  

二进制算法: 

 

位移运算符(<<)和(>>

位移运算符分为左位移运算符“<<”和右位移运算符“>>”,分别用于向左和向右执行位移运算。对于X<<N 或 X>>N 形式的运算,含义是将 X 向左或向右移动 N 位,X 的类型可以是 int,uint,long,ulong,byte,sbyte,short 和ushort 。需要注意的是,byte,sbyte,short,和 ushort 类型的值在进行位移操作后值的类型讲自动转换成 int 类型。

左移位运算符(<<)

“有符号”左移位运算符(<<)将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。

例如 3 << 2。

首先把3转换为二进制数字00000000 00000000 00000000 00000011,然后把该数字高位(左侧)的两个零移出,其他的数字都往左平移2位,最后在低位(右侧)空位补零。则得到的最终结果是00000000 00000000 00000000 00001100,则转换为十进制是12。


左移1位相当于乘以2,例如 3 << 2 =12 则是将数字3左移2位 = 3*2*2.

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

右移位运算符(>>)

“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。
“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。

>>运算规则:按二进制形式把所有的数字向右移动对应位数,低位移出(舍弃),高位的空位补符号位,移位后得到的数字为正数则补0,负数补1。

例如11 >> 2,则是将数字11右移2位

 11的二进制形式为:00001011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是00000010.转换为十进制是3.

右移一位相当于除2,右移n位相当于除以2的n次方。

Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。

小结

位移运算符右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。

位运算符的优先级 
~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|。

相关文章:

  • 算法--分隔链表(Kotlin)
  • Postgresql查询执行模块README笔记
  • 【二叉树】最大二叉树 II
  • java毕业设计小说网站mybatis+源码+调试部署+系统+数据库+lw
  • 【每日一题】 和为 K 的子数组
  • 【初认Redis】
  • HTTP之Hop-by-hop首部
  • 指标体系搭建-专项1
  • 尚好房 10_Spring Security
  • JDK RMI探索与使用--序列化
  • Self-supervised Low Light Image Enhancement and Denoising 论文阅读笔记
  • hive窗口函数(开窗函数)
  • SpringMVC:整合SSM
  • 【每日一题】路径总和 III
  • 【Vue】基础系列(三三)指令语法-事件及其修饰符,动态样式,v-model的用法,数据持久化存在本地localStorage
  • C++类中的特殊成员函数
  • Centos6.8 使用rpm安装mysql5.7
  • es6--symbol
  • Fundebug计费标准解释:事件数是如何定义的?
  • k8s如何管理Pod
  • Otto开发初探——微服务依赖管理新利器
  • zookeeper系列(七)实战分布式命名服务
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 汉诺塔算法
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 力扣(LeetCode)21
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 悄悄地说一个bug
  • 小程序测试方案初探
  • 优化 Vue 项目编译文件大小
  • 由插件封装引出的一丢丢思考
  • 找一份好的前端工作,起点很重要
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 数据库巡检项
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​Spring Boot 分片上传文件
  • #Java第九次作业--输入输出流和文件操作
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (4)(4.6) Triducer
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)计算机毕业设计高校学生选课系统
  • (六)软件测试分工
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (原)本想说脏话,奈何已放下
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET Reactor简单使用教程
  • .net wcf memory gates checking failed
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET中winform传递参数至Url并获得返回值或文件
  • @Autowired自动装配