java中的7个位运算运算符
位运算指的是针对整数的二进制进行的位移操作。
位运算提供比算术运算更高的效率,但是位运算的代码可读性较差,建议所有使用位运算的地方写上注释。
Java中提供7个位运算符用于位运算。
左移(<<)
左移运算是将操作数二进制值逐位左移若干位,左移过程中符号位不变,高位溢出则舍弃,低位则补0。
范例 | 结果 | 范例 | 结果 |
---|---|---|---|
00000001<<2 | 00000100 | 10000001<<2 | 10000100 |
01100001<<2 | 00000100 | 11100001<<2 | 10000100 |
右移(>>)
右移运算是将操作数二进制值逐位右移若干位,右移过程中符号位不变,低位溢出则舍弃,并用符号位补溢出的高位,即负数补1,正数补0。
范例 | 结果 | 范例 | 结果 |
---|---|---|---|
00000100>>2 | 00000001 | 10000100>>2 | 11100001 |
00000111>>2 | 00000001 | 10000111>>2 | 11100001 |
无符号右移(>>>)
无符号右移运算是将操作数所有二进制值逐位右移若干位,包括最高位符号位,也跟着右移,低位溢出并舍弃,高位补0。要注意的是,无符号右移(>>>)中的符号位(最高位)也会跟着变。
范例 | 结果 | 范例 | 结果 |
---|---|---|---|
00000100>>>2 | 00000001 | 10000100>>>2 | 00100001 |
00000111>>>2 | 00000001 | 10000111>>>2 | 00100001 |
与(&)
与运算是将参与运算的两个二进制数进行&运算,如果两个二进制位都是1,则与运算的结果为1,其他全部都是0。
范例 | 结果 | 范例 | 结果 |
---|---|---|---|
0&0 | 0 | 0&1 | 0 |
1&0 | 0 | 1&1 | 1 |
或(|)
或运算是将参与运算的两个二进制数进行|运算,如果两个二进制位都是0,则与运算的结果就是0,其他全都是1。即只要其中一个数字的二进制位是1,这个二进制位的运算结果就是1。要注意的是,符号位也是同样的操作。
范例 | 结果 | 范例 | 结果 |
---|---|---|---|
0|0 | 0 | 0|1 | 1 |
1|0 | 1 | 1|1 | 1 |
非(~)
非运算符也叫做取反运算符,只针对一个二进制数进行操作,如果二进制位是0,则取反位1;如果二进制位是1,则取反位0。要注意的是,符号位也是同样的操作。
范例 | 结果 | 范例 | 结果 |
---|---|---|---|
~0 | 1 | ~1 | 0 |
~0000 0001 | 1111 1110 | ~1111 1111 | 0000 0000 |
异或(^)
异或运算符是将参与运算的两个二进制数进行异或运算,如果两个二进制位相同,则结果为1,否则为0。
范例 | 结果 | 范例 | 结果 |
---|---|---|---|
0^0 | 0 | 0^1 | 1 |
1^0 | 1 | 1^1 | 0 |
"越有故事的人越沉稳简单,越肤浅单薄的人越浮躁不安。"
java中的7个位运算运算符的更多相关文章
- Java中的Bigdecimal类型运算
Java中的Bigdecimal类型运算 双精度浮点型变量double可以处理16位有效数.在实际应用中,需要对更大或者更小的数进行运算和处理.Java在java.math包中提 供的API类BigD ...
- java中的、标识符、运算符以及数据类型之间的转换。
---恢复内容开始--- 数据类型之间的转换: 1:自动转换:就是不用说出要转换成什么类型,由java中的虚拟机自动将小数据类型转换成大数据类型,但大数据中的数据精度有可能被破坏. 2:强制转换:强制 ...
- 关于java中Double类型的运算精度问题
标题 在Java中实现浮点数的精确计算 AYellow(原作) 修改 关键字 Java 浮点数 精确计算 问题的提出:如果我们编译运行下面这个程序会看到什么?publi ...
- 关于java中Double类型的运算精度问题(转)
Java Java double:浮点数:精确计算 public class Test{ public static void main(String args[]){ Syst ...
- java中多个数字运算后值不对(失真)处理方法
最近遇到一个bug ,在java里面计算两个数字相减,633011.20-31296.30 得到的结果居然是601714.8999999999,丢失精度了,原来这是Java浮点运算的一个bug. 解决 ...
- JAVA中自增自减运算符(i++与++i的区别)
注意: 自增运算符和自减运算符只能用于变量,而不能用于常亮或表达式 运算符 运算 范例 结果 ++ 自增(前):先运算后取值 a=2;b=++a; a=3;b=3; ++ 自增(后):先取值后运算 a ...
- Java中的按位运算
博客大搬家. 一.位运算符简介: 1.按位与&.如果两个整形数据 a.b 对应位都是1,则结果位才为1,否则为0,(int 最大值0x7fffffff ): int a = 0x7ffffff ...
- java中的按位与运算
package scanner; public class SingleAnd { public static void main(String[] args) { int[] first = {10 ...
- java中关于'&&'、'||'混合运算优先级问题小结
package com.per.sdg.operator; /** * 结论:先进行'&&'运算,在进行'||'运算 * @author sundg * */ public class ...
随机推荐
- authenticating with the app store 一直卡住--问题记录
参考链接:https://blog.csdn.net/csdn2314/article/details/90021367 authenticating with the app store 一直卡住最 ...
- IEDA创建Springboot项目
随着技术的更新对于开发速度的追求,我们越来越不能忍受的是Spring框架对于集成开发以后大量的配置问题.所以SprigBoot应运而生,SpringBoot框架其实就是在Spring框架的外边包裹上了 ...
- 基本 Python 面试问题
目录 1.为什么学习Python? 2.通过什么途径学习的Python? 3.Python和Java.PHP.C.C#.C++等其他语言的对比? 4.简述解释型和编译型编程语言? 5.Python解释 ...
- DNS分离解析
实验环境: 一台内网(client)1块网卡:一台网关(dns)2块网卡:一台外网1块网卡 DNS服务器开启路由转发 [root@localhost ~]# vi /etc/sysctl.conf n ...
- 新建Springboot项目
软件为sts软件 1.新建项目 2.工程名称 3.选择依赖项,可以在搜索框中搜索 4.添加端口号 5.创建controller 6.创建controller类,并输入一下内容 package com. ...
- 数据结构——栈与递归(recursion)
/* recursion.c */ /* 递归 */ #include <stdio.h> void interface(void); /* 斐波那契数列以及阶乘函数声明 */ long ...
- 11/2 下午 <String>
344. Reverse String 解法一(暴力法): 直接从两头往中间走,同时交换两边的字符即可 首位对调位置. class Solution { public void reverseStri ...
- win7 64位平台编译的程序在XP 32位平台无法运行的解决方法
win7 64位平台编译的程序在XP 32位平台无法运行的解决方法 vs2010的开发环境,制作了一个DLL库.但DLL在XP 32位平台一直无法使用.解决方法如下: 右键项目,属性->配置属性 ...
- [LeetCode] 632. Smallest Range Covering Elements from K Lists 覆盖K个列表元素的最小区间
You have k lists of sorted integers in ascending order. Find the smallest range that includes at lea ...
- [LeetCode] 112. Path Sum 二叉树的路径和
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...