说明

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

在系统中,一个字节占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;移位运算速度高于乘除运算。

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

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

  1. Java中「与运算,或运算,异或运算,取反运算。」

    Java中「与运算,或运算,异或运算,取反运算.」 文章目录 Java中「与运算,或运算,异或运算,取反运算.」 Java中的「与运算(AND) & 」 规则 :都为1时才为1,否则为0 Ja ...

  2. java中与运算,或运算,异或运算,取反运算

    (&和|运算时候1当成true,0当做false) 一:& //与运算 &  规则 :都为1时才为1         System.out.println( 7 & 9 ...

  3. java或异运算_java中与运算,或运算,异或运算,取反运算

    //与运算 &  规则 :都为1时才为1 System.out.println( 7 & 9); /* *  7二进制 0111 *  9二进制 1001 * ----------- ...

  4. C++ 笔记(10)— 运算符(算术、关系、逻辑、位运算、赋值和其它运算符)

    运算符是一种告诉编译器执行特定的数学或逻辑操作的符号. C++ 内置了丰富的运算符,并提供了以下类型的运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其它运算符 1. 算术运算符 ...

  5. MySQL—运算符详解(算术、比较、逻辑、范围运算符与集合运算符 模糊查询 NULL值运算与null值判断 位运算符)

    MySQL--运算符详解 知识纲要 算术运算符 比较运算符 逻辑运算符 范围运算符与集合运算符 模糊查询 NULL值运算与null值判断 位运算符 1.算术运算符 加 减 乘 除 取余 div 也表示 ...

  6. day017:Java进制转换、原码反码补码、位运算、位移运算符

    一.进制介绍: 1.进制:指进位制,表示某一位置上的数,运算时是逢X进一. 十进制就是逢十进一,二进制就是逢二进一,八进制就是逢八进一. 2.Java中默认的数值都是十进制,如果要输入其他进制,在数值 ...

  7. c语音异或运算符_c语言异或(c语言异或运算例子)

    用异或算法逐字节对文件C进行加密,输出到另外一个新文件D中. #include #include int main(){ FILE *p1,*p2; char ch,n; p1=fopen("D:\\ ...

  8. 重载运算与类型转换——基本概念,输入和输出运算符,算术和关系运算符,赋值运算符,下标运算符,递增和递减运算符,成员访问运算符...

    一.基本概念 重载的运算符时具有特殊名字的函数:它们的名字由关键字operator和其后要定义的运算符号共同组成.和其他函数一样,重载的运算符也包含返回类型.参数列表以及函数体. 重载运算符函数的参数 ...

  9. linux运算_CentOS「linux」学习笔记22:算术运算符、逻辑运算符、关系运算符

    ​linux基础操作:主要介绍啦算术运算符.逻辑运算符.关系运算符 1.算术运算符[主要用来计算数值] 注意使用expr运算时运算符和数值之间需要有空格,其他方式运算时不能有空格. 常用算术运算符号: ...

最新文章

  1. 【Ant Design Pro 一】 环境搭建,创建一个demo
  2. shell如何将标准错误输出重定向为标准输出
  3. SVN在centos5.4的安装步骤:
  4. 微星笔记本电脑恢复出厂或者一键还原图文流程
  5. AngularJS基础01 从HelloWorld说起
  6. 淘宝服务端高并发分布式架构的十四次演进之路
  7. idea:打包jar(原文by曲高终和寡)
  8. asp.net 中textbox如何自动换行
  9. 文献记录(part30)--DCR Disentangled component representation for sketch generation
  10. zepto学习之路--源代码提取
  11. C# 可空类型和空接合运算符(??)
  12. jQuery查找标签--选择器,筛选器,模态对话框, 左侧菜单栏
  13. Goods:查询某个用户的购物车条目以及添加购物车条目
  14. 拆解任務與目標、按時完成,不再被deadline追著跑
  15. REST是否会步SOAP的后尘?
  16. Dbgview 罕见的一次报错问题解决
  17. 在未来税制下个人所得税信息管理系统建设设想
  18. 【BZOJ3470】Freda’s Walk
  19. PyTorch深度学习-跟着小土堆学习
  20. 计算机的收获初一作文,初一开学一个月的收获和感受作文

热门文章

  1. VSS2005使用技巧
  2. HTK语音识别工具包的安装和编译
  3. 转载Shell 数组学习
  4. 6 zabbix警报邮件发送配置
  5. 定时多次自动打开关闭网页的bat脚本
  6. python连接数据库生成可视化_python3.6 连接数据库并用matplotlib可视化代码
  7. 算法学习:归并排序, pta归并排序(递归法)
  8. python bool类型_python bool数据类型
  9. 对称矩阵的三对角分解(Lanzos分解算法)-MINRES算法预热
  10. Nginx配置基于IP的访问控制