Java中的位运算符 &、|、^、~、<< 和 >>
一、& 按位与运算符
5 & 3 = 1
5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
规则:对应的两个二进制位都为1时,结果位就为1,其他情况都为0。
二、| 按位或运算符
5 | 3 = 7
5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101
3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011
规则:只要对应的二个二进位有一个为1时,结果位就为1。
三、^ 按位异或运算符
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中的位运算符 &、|、^、~、<< 和 >>的更多相关文章
- Java中的位运算符
Java提供的位运算符有:左移( << ).右移( >> ) .无符号右移( >>> ) .位与( & ) .位或( | ).位非( ~ ).位异或( ...
- Java中的位运算符、移位运算
一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&) :两位全为1,结果为1,否则为0: (2)按位或 (|) :两位有一个为1,结果为1,否则为0: (3) ...
- Java 逻辑运算符、位运算符、移位操作符 总结(Java 学习中的小记录)
Java 逻辑运算符.位运算符.移位操作符 总结 作者:王可利(Star·星星) 逻辑运算符,表格如下: 解析逻辑运算符表: 1.与 (&) 特点:两个都为真的时候,结果为真.两个为 ...
- java中的移位运算符:<<,>>,>>>总结
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- Java中的移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- java中的移位运算符:<<,>>,>>>总结(转)
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- 【java编程】java中的移位运算符
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- Java学习路线:Java中的位移运算符介绍
学习java本来就是一件日积月累的事情,或许你通过自学能掌握一些皮毛技术,学到java的一些基本大面,但想要做到精通,还是需要自己技术的日积月累和工作经验的不断积累. 今天给大家分享的技术知识是:ja ...
- [java基础] 002 - 位运算符的详解和妙用
一:位运算符详解 位运算符主要用来对操作数二进制的位进行运算.按位运算表示按每个二进制位(bit)进行计算,其操作数和运算结果都是整型值. Java 语言中的位运算符分为位逻辑运算符和位移运算符两类, ...
随机推荐
- rootfs -根文件系统制作
目录 目录 目录 概述 概念 根文件系统是什么 根文件系统中有什么 根文件系统的形式 Busybox 简介 什么是 linuxrc VFS 简介 Busybox 工具 Busybox 目录结构 Men ...
- C# windows服务知识集锦
最近公司项目,本人也是刚接触windows服务,现在把这两天上网学习的一些资料拿出来与大家分享. 1).关于windows服务安装包的制作和自动启动服务 http://blog.csdn.net/re ...
- 使用metaweblog API实现通用博客发布 之 版本控制
使用metaweblog API实现通用博客发布 之 版本控制 接上一篇本地图片自动上传以及替换路径,继续解决使用API发布博客的版本控制问题. 当本地文档修订更新以后,如何发现版本更新,并自动发布到 ...
- mysql5.7当两个字段名类似,查询时会出错
excepInfo: select id,describe from iwebshop_student_problem where id=256 order by id desc -- You hav ...
- http升级https遇到的问题
1. 功能请求失效: 可能是链接为http请求,导致出现问题 2.浏览器网址左边出现黄色感叹号: 这是由于网页中存在http的图片链接,需要根据实际情况修改; 3.将网页内的http请求变为https ...
- Dapr + .NET Core实战(五)Actor
什么是Actor模式 Actors 为最低级别的"计算单元" 以上解释来自官方文档,看起来"晦涩难懂".大白话就是说Actors模式是一段需要单线程执行的代码块 ...
- javascript 高阶函数 实现 AOP 面向切面编程 Aspect Oriented Programming
AOP的主要作用是吧一些跟核心业务逻辑模块无关的功能 -日志统计, 安全控制, 异常处理- 抽离出来, 再通过"动态织入"的方式掺入业务逻辑模块中. 这里通过扩展Function. ...
- 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视GCC编译全过程 | 百篇博客分析OpenHarmony源码| v57.01
百篇博客系列篇.本篇为: v57.xx 鸿蒙内核源码分析(编译过程篇) | 简单案例窥视编译全过程 | 51.c.h.o 编译构建相关篇为: v50.xx 鸿蒙内核源码分析(编译环境篇) | 编译鸿蒙 ...
- vm 将宿主机文件夹 映射至 虚拟机
一.关于centos如何安装(自行百度) 二.设置共享文件夹 添加共享文件夹(关闭虚拟机时操作) 虚拟机->设置->选项->共享文件夹 三.安装vm-tools (请用root用户执 ...
- P5074-Eat the Trees【插头dp】
正题 题目链接:https://www.luogu.com.cn/problem/P5074 题目大意 给出一个\(n\times m\)的网格,有的必须铺线有的不能,铺成若干条闭合回路,求方案数. ...