一、& 按位与运算符

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. Postman 如何调试加密接口?

    大家好,我是安果! 众所周知,Postman 是一款非常流行且易用的 API 调试工具,在接口调试或测试时经常被使用针对普通 API 接口,我们可以直接在 Postman 中输入 URL.Query ...

  2. Ubuntu18.04安装jenkins

    官网参考指引:https://pkg.jenkins.io/debian-stable/ wget -q -O - https://pkg.jenkins.io/debian-stable/jenki ...

  3. mumu模拟器使用

    连接mumu模拟器 启动mumu模拟器 执行命令:adb connect 127.0.0.1:7555(windows系统推荐使用gitbash) 安装app Gitbash下执行:adb insta ...

  4. mysql8 navicat远程链接失败

    原因:mysql 8加密规则问题 更改加密规则: ALTER USER 'ycc'@'%' IDENTIFIED BY 'you password' PASSWORD EXPIRE NEVER; 修改 ...

  5. ssh 登录远程服务器--config配置

    一.config 配置案列 Host master HostName: 39.105.61.1 Port 22 User root IdentityFile <id_rsa> 二.配置讲解 ...

  6. T183637-变异距离(2021 CoE III C)【单调栈】

    正题 题目链接:https://www.luogu.com.cn/problem/T183637 题目大意 给出\(n\)个二元组\((x_i,y_i)\),求最大的 \[|x_i-x_j|\time ...

  7. WPF进阶技巧和实战07--自定义元素01

    完善和扩展标准控件的方法: 样式:可使用样式方便地重用控件属性的集合,甚至可以使用触发器应用效果 内容控件:所有继承自ContentControl类的控件都支持嵌套的内容.使用内容控件,可以快速创建聚 ...

  8. 残差网络resnet理解与pytorch代码实现

    写在前面 ​ 深度残差网络(Deep residual network, ResNet)自提出起,一次次刷新CNN模型在ImageNet中的成绩,解决了CNN模型难训练的问题.何凯明大神的工作令人佩服 ...

  9. docker之swarm容器部署及运维

    1.概念 Docker Swarm 是 Docker 的集群管理工具.它将 Docker 主机池转变为单个虚拟 Docker 主机. Docker Swarm 提供了标准的 Docker API,所有 ...

  10. gin 集成 consul

    "github.com/hashicorp/consul/api" package initialize import ( "fmt" "github ...