Java 位运算符 深入理解
在Java中存在着这样一类操作符,是针对二进制进行操作的。它们各自是&、|、^、~、>>、<<、>>>几个位操作符。不管是初始值是依照何种进制,都会换算成二进制进行位
操作。接下来对这几种操作符进行一下简单的解说。
&:
作用是对运算符两側以二进制表达的操作符按位分别进行'与'运算。而这一运算是以数中同样的位(bit)为单位的。操作的规则是:仅当两个操作数都为1时。输出结果才为1。否
则为0,示比例如以下:
12 的二进制为 1100
5 的二进制为 0101
则 12 & 5 的二进制为 0100,则完整的运算式为 12 & 5 = 4;
|:
作用是对运算符两側以二进制表达的操作符按位分别进行'或'运算。而这一运算是以数中同样的位(bit)为单位的。
操作的规则是:仅当两个操作数都为0时,输出的结果才为0。
否则为1,示比例如以下:
12 的二进制为 1100
5 的二进制为 0101
则 12 | 5 的二进制为 1101。则完整的运算式为 12 & 5 = 13;
^:
作用是对运算符两側以二进制表达的操作数按位分别进行'异或'运算,而这一运算是以数中同样的位(bit)为单位的。
异或运算操作的规则是:仅当两个操作数不同一时候。对应的
输出结果才为1,否则为0,示比例如以下:
12 的二进制为 1100
5 的二进制为 0101
则 12 | 5 的二进制为 1001。则完整的运算式为 12 & 5 = 9;
~:
'取反'运算符~的作用是将各位数字取反:全部的0置为1,1置为0,示比例如以下:
12 的二进制为 1100
进行取反操作为 10000000 00000000 00000000 00001101
则完整的运算式为
~12 = -13
<<:
左移就是把一个数的全部位数都向左移动若干位,示比例如以下:
12 的二进制为 1100
则 12 << 1 的二进制为 11000, 则完整的运算式为 12 << 1 = 24;
>>:
右移就是把一个数的全部位数都向右移动若干位,示比例如以下:
12 的二进制为 1100
则 12 >> 1 的二进制为 0110。 则完整的运算式为 12 >> 1 =
6;
>>>:
无符号右移一位。不足的补0。 示比例如以下:
12 的二进制为 1100
则 12 >> >1 的二进制为 0110, 则完整的运算式为 12
>> 1 = 6;
题外话:位运算是一种基于二进制的运算,涉及到知识包含原码、反码、补码,在此做一个小小的说明,
对于原码。就是当前数字的二进制表现形式,如-1的原码是1000 0001。
对于反码,正数的反码就是本身。负数的反码是二进制保留符号位。剩余位取反,比如-1的反码是1111 1110;
对于补码,正数的反码、补码、原码都是一样的,负数的补码是在其反码的基础上+1,比如-1的补码是1111 1111。
在JDK的原码中。有很多初始值都是通过位运算计算的,位运算有很多特性,能够在线性增长的数据中起到作用。且对于一些运算,位运算是最直接、最简便的方法。
Java 位运算符 深入理解的更多相关文章
- Java 位运算符和 int 类型的实现
Java 位运算符和 int 类型的实现 其他运算符 # 算术运算符 +.-.*./.++i.i++.--i.i-- # 关系运算符 ==.!=.>.<.>=.<= # 逻辑运 ...
- 利用Java位运算符,完成Unsigned转换(无符号)
方案二:利用Java位运算符,完成Unsigned转换. 正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码: publi ...
- 【java提高】(17)---Java 位运算符
Java 位运算符 &.|.^.~.<<.>> 以前学过有关java的运算符,不过开发了这么久也很少用过这个.现在由于开发需要,所以现在再来回顾整理下有关java的运算 ...
- LeetCode刷题笔记(3)Java位运算符与使用按位异或(进制之间的转换)
1.问题描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 算法应该具有线性时间复杂度并且不使用额外空间. 输入: [4,1,2,1,2] 输 ...
- Java位运算符、位移运算符;原码、反码、补码
文章背景:雪花算法 id 生成长度问题. Java位运算符 - 异或运算符(^)<p>运算规则:两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1.</p> - ...
- Java位运算符&、|、^、>>、<<、~、>>>
如果要搞懂Java中的位运算符,首先要搞懂二进制的运算,之前一篇有介绍详细请看 二进制运算-十进制与二进制的转换 Java中的位运算符有:&(按位与).|(按位或).^(按位异或).>& ...
- java 位运算符 以及加法 交换两个变量值
先给出十转二的除法 2 60 30 0 15 0 7 1 3 1 1 1 0 1 60转二 111100 再介绍位运算符 a=60 b=13 A = 0011 1100 B ...
- Java位运算符浅析
在学习源码中,发现有大量使用位运算符,这样做的目的是为了节约内存开销和加快计算效率. 位运算符,这个”位”代表这什么? 位:二进制位简称“位”,是二进制记数系统中表示小于2的整数的符号,一般用1或 0 ...
- (九)java位运算符
位运算符 &(与),|(或),^(异或),~(取反),<<(左移),>>(右移),>>>(无符号右移) 1:为true,0为false ...
随机推荐
- hdu_4430,二分
注意处理溢出 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...
- Java JNI 入门篇——传递数组与修改数组
这里不在重复JavaJNI 的开发过程了,不熟悉的同学请参考:Java JNI HelloWorld 直接上主要代码: ArrayJNI.Java package com.example.jni; p ...
- nyoj--108--士兵杀敌(一)(区间求和&&树状数组)
士兵杀敌(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在想知 ...
- 14.mocha+should.js
转自http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html 众所周知对于任何一个项目来说,做好单元测试都是必不 ...
- django session深入
转至原文 https://www.cnblogs.com/zhaof/p/6281468.html 基于cookie做用户验证时:敏感信息不适合放在cookie中 session依赖cookie s ...
- [HNOI2012] 永无乡 解题报告 (splay+启发式合并)
题目链接:https://www.luogu.org/problemnew/show/P3224#sub 题目: 题目大意: 维护多个联通块,没有删除操作,每次询问某一联通块的第k大 解法: 维护联通 ...
- SQL 循环30日
循环30日的统计 大概格式是 with Date as ( select cast(DATEADD(mm, DATEDIFF(mm,,getdate()), ) as datetime) Date u ...
- 使得nginx支持pathinfo访问模式
原理: 任意创建一个 in.php 文件: <?php echo '<pre>'; ...
- JS获取当前时间(YYYY-MM-DD ),element显示默认当前时间,显示默认昨天,显示默认上个月
原文链接:点我 进来的随便看看,或许有帮助 vue+element-ui datepicker 设置默认日期用的框架是vue+element-ui ,以下是时间控件 <el-form-ite ...
- Testin实验室:陌陌APP通过率为94.92% 基本满足移动社交需求
Testin实验室:陌陌APP通过率为94.92% 基本满足移动社交需求 2014/11/10 · Testin · 独家评測 11月8日,国内移动社交应用陌陌公开向美国证券交易委员会提交了IPO申请 ...