一、& 按位与运算符

5 & 3 = 1

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011

规则:对应的两个二进制位都为1时,结果位就为1,其他情况都为0。

1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0

二、| 按位或运算符

5 | 3 = 7

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011

规则:只要对应的二个二进位有一个为1时,结果位就为1。

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

三、^ 按位异或运算符

5 ^ 3 = 6

5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101

3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011

异或的运算法则:

0 ⊕ 0 = 0,1 ⊕ 0 = 1,0 ⊕ 1 = 1,1 ⊕ 1 = 0(相同为0,不同为1)

这些法则与加法是相同的,只是不带进位,所以异或常被认作不进位加法。

四、~ 按位取反运算符

取反,是 Java 使用补码来表示二进制数,在补码表示中,最高位符号位正数的符号位为0,负数的为1。

① 正数取反

~5 = -6

5 转换为二进制数为:             0000 0000 0000 0101

得到二进制数每一位(包括符号位)取反: 1111 1111 1111 1010(注意这和原码与反码之间的转换不一样)

得到最终结果取补码:            1000 0000 0000 0110

得到最终结果作为原码转换为十进制数:-6

则 5 取反为 -6 。

② 负数取反

~ (-5) = 4

-5 转换为二进制数为:         1000 0000 0000 0101

得到二进制数取补码:          1111 1111 1111 1011(这里和走原码→反码→补码的流程一样)

得到二进制数的补码每一位取反:   0000 0000 0000 0100(这里和不走原码→反码的取反不一样,全部位取反。到达这一步后所得的二进制数为正数,由于正数的原码、反码、补码相同,后面的运算可以忽略,视此步得到的为最终结果的二进制数)

得到最终结果的取补码:       0000 0000 0000 0100

得到最终结果的原码转换为十进制数:4

则 -5 取反为 4 。

注:逻辑取反符号 "!",!5 = 0,C中可以这么来,但Java中 "!"运算符不能用于int 。

五、<< 左移运算符 和 >> 右移运算符

① 将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用 0 填补,高位左移溢出则舍弃该高位。

( 2 << 1 ) 的结果为 4

2 转换为二进制数为:   0000 0000 0000 0010

全部位左移 1 位后为:     0000 0000 0000 0100

转化为十进制为 4 。

② 将一个数的各二进制位全部右移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其左边边空出的位用 0 填补,低位右移移出的位则舍弃该位。

( 2 >> 1 ) 的结果为 1

2 转换为二进制数为:         0000 0000 0000 0010

全部位右移 1 位后为:        0000 0000 0000 0001

转化为十进制为 1 。

:>>> 是无符号右移,忽略符号位,空位都以0补齐

Java中的位运算符 &、|、^、~、<< 和 >>的更多相关文章

  1. Java中的位运算符

    Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...

  2. Java中的位运算符、移位运算

    一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&)  :两位全为1,结果为1,否则为0: (2)按位或  (|)   :两位有一个为1,结果为1,否则为0: (3) ...

  3. Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)

    Java 逻辑运算符.位运算符.移位操作符  总结     作者:王可利(Star·星星) 逻辑运算符,表格如下: 解析逻辑运算符表: 1.与 (&) 特点:两个都为真的时候,结果为真.两个为 ...

  4. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  5. Java中的移位运算符

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  6. java中的移位运算符:<<,>>,>>>总结(转)

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  7. 【java编程】java中的移位运算符

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  8. Java学习路线:Java中的位移运算符介绍

    学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...

  9. [java基础] 002 - 位运算符的详解和妙用

    一:位运算符详解 位运算符主要用来对操作数二进制的位进行运算.按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值. Java 语言中的位运算符分为位逻辑运算符和位移运算符两类, ...

随机推荐

  1. JavaScript深拷贝实现方式

    1.递归 function deepCope (obj) { // 要拷贝的数据为引用类型属性(数组或对象) if (obj && typeof obj === 'object') { ...

  2. 【Azure API 管理】APIM 配置Validate-JWT策略,验证RS256非对称(公钥/私钥)加密的Token

    问题描述 在APIM中配置对传入的Token进行预验证,确保传入后端被保护的API的Authorization信息正确有效,可以使用validate-jwt策略.validate-jwt 策略强制要求 ...

  3. python中字符串的各种方法

     图片来源见水印,一个学python的公众号

  4. Brute Force暴力破解

    Low 服务器只是验证了参数Login是否被设置,没有任何的防爆破机制,且对参数username.password没有做任何过滤,存在明显的sql注入漏洞. 方法一:bp爆破 直接对爆破密码得到pas ...

  5. 入坑微信小程序必经之路(六)图片上传服务器——WebSercice接口

    wxml文件 <view class="weui-uploader"> <view class="img-v weui-uploader__bd&quo ...

  6. PHP的那些魔术方法(一)

    在PHP中,有一堆魔术方法,服务于类和对象.PHP虽然也是纯种的面向对象语言,但是之前的PHP还真不是,所以有一些面向对象的标准实现并不完善,比如重载.但是,我们可以通过一些魔术方法来弥补,例如__c ...

  7. 搭建http文件服务器 - python3使用http.server搭建http文件服务器

    适用场景 只要有python3就可以,windows系统cmd窗口直接敲命令,Linux系统,直接敲命令 step-1 cd cd 到需要搭建服务器的目录 step-2 http.server pyt ...

  8. MySQL数据库连接重试功能和连接超时功能的DB连接Python实现

    def reConndb(self): # 数据库连接重试功能和连接超时功能的DB连接 _conn_status = True _max_retries_count = 10 # 设置最大重试次数 _ ...

  9. 《手把手教你》系列技巧篇(二十七)-java+ selenium自动化测试- quit和close的区别(详解教程)

    1.简介 尽管有的小伙伴或者童鞋们觉得很简单,不就是关闭退出浏览器,但是宏哥还是把两个方法的区别说一下,不然遇到坑后根本不会想到是这里的问题. 2.源码 本文介绍webdriver中关于浏览器退出操作 ...

  10. AT2305-[AGC010D]Decrementing【博弈论】

    正题 题目链接:https://www.luogu.com.cn/problem/AT2305 题目大意 \(n\)个数字两个人进行博弈,每个人的操作为 选择一个大于1的数字减一 之后所有数字除以所有 ...