关于java中位运算符的使用和理解


  • &(按位与)

    ‘ & ’ 符号的作用是对运算符的两侧以二进制表达的操作符按位进行‘与’运算。
    规则:

    只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为0,结果就为0)。

    个人理解:在编程中,我们可以认为‘1’代表‘true’,‘0’代表‘false’。那么就可以理解为只有都为‘true’的时候才为‘true’,否则就是‘false’。

    举例:
  • 5 & 10 = ?

    10 的二进制为:1010

    5 的二进制为:0101

    则 5 & 10 的二进制为 0000,完整的运算为 5 & 10 = 0

  • int i = 12; i &= 7; i = ?
    ‘ &= ’ 的逻辑跟 ‘ += ’ 的处理逻辑是一样的
    i &= 7 可以看成 i = i & 7
    所以 i = 4


  • |(按位或)

    ‘ | ’ 符号的作用是对运算符两侧以二进制表达的操作符按位分别进行’或’运算。
    规则:

    只有两个操作数对应位同为1时,结果为1,其余全为0. (或者是只要有一个操作数为1,结果就为1)。

    个人理解:在编程中,我们可以认为‘1’代表‘true’,‘0’代表‘false’。那么就可以理解为只要有一个为‘true’的时候就为‘true’,否则就是‘false’。

    举例:
  • 5 | 10 = ?

    10 的二进制为:1010

    5 的二进制为:0101

    则 5 | 10 的二进制为 1111,完整的运算为 5 | 10 = 15

  • int i = 12; i |= 7; i = ?
    ‘ |= ’ 的逻辑跟 ‘ += ’ 的处理逻辑是一样的
    i |= 7 可以看成 i = i | 7
    所以 i = 15


  • ^(按位异或)

    ‘ ^ ’ 符号的作用是对运算符两侧以二进制表达的操作数按位分别进行’异或’运算。
    规则:

    仅当两个操作数不同一时候。对应的输出结果才为1,否则为0。

    个人理解:在编程中,我们可以认为‘1’代表‘true’,‘0’代表‘false’。那么就可以理解为值不相等的时候为‘true’,值相等的时候为‘false’。

    举例:
  • 5 ^ 10 = ?

    10 的二进制为:1010

    5 的二进制为:0101

    则 5 ^ 10 的二进制为 1111,完整的运算为 5 ^ 10 = 15

  • int i = 12; i ^= 7; i = ?
    ‘ ^= ’ 的逻辑跟 ‘ += ’ 的处理逻辑是一样的
    i ^= 7 可以看成 i = i ^ 7
    所以 i = 11


  • ~(按位非)

    ‘ ~ ’ 符号的作用是将各位数组取反。
    规则:

    全部的0变为1,1变为0。

    个人理解:在编程中,我们可以认为‘1’代表‘true’,‘0’代表‘false’。那么就可以理解为将‘true’变成‘false’,而‘false’变为‘true’。

    举例:
  • ~ 10 = ?

    10 的二进制为:1010

    取反后为:1111 1111 1111 0101

    则 1111 1111 1111 0101 的十进制为 -11,完整的运算为 ~ 10 = -11

    很多人对负数的二进制的转换很迷惑,在这里为大家讲解下:
    因为电脑的世界中只有 ‘ 1 ’ 和 ‘ 0 ’ ,所以在表示正负数的时候是从最高位看的,最高位如果为 ‘ 1 ’ 则为负数,如果是 ‘ 0 ’ 则是正数。
    但是如果负数单纯是把最高位变为1的话,在运算中会出现不是我们想要的值。所以引入了:‘原码’,‘反码’,‘补码’。
    正数的‘原码’,‘反码’,‘补码’都一样。
    负数的‘反码’是对除了符号位(最高位)的‘原码’取反,而‘补码’是对‘反码’ + 1,而计算机所采用的就是‘补码’的方式。
    示例:
    -11的‘原码’是 : 1000 0000 0000 1011
    求出对应的反码 : 1111 1111 1111 0100
    求出对应的补码 : 1111 1111 1111 0101
    所以在计算机中 ‘ -11 ’ 对应的二进制为 ‘ 1111 1111 1111 0101 ’


  • <<(左位移运算符)

    ‘ << ’ 符号的作用是将一个运算对象的各二进制位全部左移若干位。
    规则:

    左边的二进制位丢弃,右边补0。

    个人理解:左移可以看成是乘以2的多少次方。3 << 3就代表3乘以2的3次方。

    举例:
  • 10 << 3 = ?

    10 的二进制为:0000 0000 0000 1010

    移位后为:0000 0000 0101 0000 (80)

    则 10 << 3 = 80

  • int i = 5; i <<= 4; i = ?
    ‘ <<= ’ 的逻辑跟 ‘ += ’ 的处理逻辑是一样的
    i <<= 4 可以看成 i = i << 4
    所以 i = 80


  • >>(右位移运算符)

    ‘ >> ’ 符号的作用是将一个运算对象的各二进制位全部右移若干位。
    规则:

    正数左补0,负数左补1,右边丢弃。

    个人理解:正数右移可以看成是跟2的多少次方取模,10 >> 3就代表10除以8取整。而负数则需要对应的转换,因为负数进行了补码的操作,所以跟正数的逻辑不同

    举例:
  • 10 >> 3 = ?

    10 的二进制为:0000 0000 0000 1010

    移位后为:0000 0000 0000 0001

    则 10 >> 3 = 1

  • int i = 5; i >>= 4; i = ?
    ‘ >>= ’ 的逻辑跟 ‘ += ’ 的处理逻辑是一样的
    i >>= 4 可以看成 i = i >> 4
    所以 i = 0


  • >>>(无符号右位移运算符)

    ‘ >>> ’ 符号的作用是将一个运算对象的各二进制位全部右移若干位。
    规则:

    右移后左边空出的位用零来填充。移出右边的位被丢弃。无符号的意思是将符号位当作数字位看待。

    个人理解:正数的无符号右移可以看成是跟2的多少次方取模,10 >>> 3就代表10除以8取整。而负数的无符号右移是不同的,就不需要再进行转换的操作,-1 >>> 1 = 2147483647

    举例:
  • 10 >>> 3 = ?

    10 的二进制为:0000 0000 0000 1010

    移位后为:0000 0000 0000 0001

    则 10 >>> 3 = 1

  • int i = 5; i >>>= 4; i = ?
    ‘ >>>= ’ 的逻辑跟 ‘ += ’ 的处理逻辑是一样的
    i >>>= 4 可以看成 i = i >>> 4
    所以 i = 0

转载请标明出处:https://blog.csdn.net/qq_36423017/article/details/82222859

关于java中位运算符的使用和理解相关推荐

  1. java中的.运算符_java中的各种运算符

    1.算术运算符: 算术运算符也就是我们小学所学过的:+ - * /:还有取模运算符:%:取模运算符也就是求余的 运算: 运算形式:操作数 + 操作数:操作数 - 操作数:操作数 * 操作数:操作数 / ...

  2. 【老九学堂】【Java】位运算符

    1.Java中的位运算符(操作符) 位运算符主要针对二进制,它包括了:"与"."非"."或"."异或". 从表面上看似乎 ...

  3. C语言中位运算符有哪些

    C语言中位运算符有: 位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运 ...

  4. 常见位操作及运算应用举例:1,C语言中位运算符异或“∧”的作用​​​​​​​2,异或运算的作用3,(与运算)、|(或运算)、^(异或运算)

    1 C语言中位运算符异或"∧"的作用: 异或运算符∧也称XOR运算符.它的规则是若参加运算的两个二进位同号,则结果为0(假):异号则为1(真).即0∧0=0,0∧1=1,1∧1=0 ...

  5. 算法之美 | 位运算的巧妙奥秘(一) | JAVA中位运算的深入浅出

    文章目录 前言 一.位运算符号 二.位运算的运算规则 扩展 前言 传智杯初赛后有感而写,我目前阶段所学习的算法,只是最基础的数学,对于数字和数学公式还是不敏感,在小卡与质数2那道题,解题的思路只有最基 ...

  6. 12 java中instanceof运算符的意义和用法

    java中instanceof运算符的意义和用法 instanceof运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来标识该对象是否为特定类或者它的子类的一 ...

  7. 详细介绍Java中的运算符

    Java中类型转换 不同类型的数据可以在一起运算,需要将他们转换为同一类型,就可以进行运算 Java类型转换的分类 隐式类型转换[自动类型转换] 小范围数据转大范围 byte->short-&g ...

  8. Java中的运算符——逻辑运算符详解

    逻辑运算符主要包括逻辑与( & ),逻辑或( | ),逻辑异或( ^ ),短路与( && ),短路或( || ).所有逻辑运算符的特点是操作数都是布尔类型,并且最终的运算结果也 ...

  9. java中冒号运算符起什么作用呢?

    转自: java中冒号运算符起什么作用呢? 下文笔者讲述java中冒号运算符的功能简介说明,如下所示: 冒号运算符的功能: 1.跳转2.三元表达式3.迭代循环4.断言5.switch6.方法(jdk8 ...

最新文章

  1. 一年六篇顶会的清华大神提出Fastformer:史上最快、效果最好的Transformer
  2. 硬核浪漫还看焊武大帝
  3. delphi webbrowser 对象不支持_【Python 秘籍】排序不支持原生比较的对象
  4. python3 mysql错误 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
  5. 【Web安全】PHP与Web表单交互-POST方法与GET方法(看不懂你来打我)
  6. wxWidgets:wxSimpleHtmlListBox类用法
  7. QT的QPicture类的使用
  8. mybatis 插件原理
  9. 写给萌新,聊聊你初入职场的那些疑惑~
  10. webdynpro 组件重用 传值问题
  11. Bootstrap栅格系统研究
  12. PYTHON2.day06
  13. 80%程序员不知道的职场秘诀,升职加薪不是梦
  14. 16.深入分布式缓存:从原理到实践 --- 新的旅程
  15. 图片怎样把背景去掉?怎么把图片背景透明?
  16. MVX相关设计模式的理解。
  17. 字符串模式匹配——BF算法
  18. fme使用workspacerunner批量处理数据
  19. OSS图片服务域名与bucket绑定域名的区别
  20. 如何使文字和图片垂直居中对齐

热门文章

  1. Background Matting-v1
  2. ACCP学习旅程之----- SQL Server(第五章 数据查询(二))
  3. G700android6,华为G700联通版小米MIUI V5 4.2.17刷机包4.2.1Rom完美版
  4. 怎么用106短信平台来发送营销短信?手把手教你轻松掌握
  5. 嵌入式平台音频播放器设计(基础篇)
  6. PHP5:session会话的使用和分析
  7. springboot毕设项目海鲜配送管理系统q3m5u(java+VUE+Mybatis+Maven+Mysql)
  8. 《计算之魂》--- 思考题0.3 【读书笔记】
  9. 后端分页+前端分页显示(Angular+Primeng+SpringBoot)
  10. PyTorch学习笔记:nn.ReLU——ReLU激活函数