Java 中的位运算
移位运算符
包括:
“>> 右移”;“<< 左移”;“>>> 无符号右移”
例子:
-5>>3=-1
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1111 1111
其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。
-5<<3=-40
1111 1111 1111 1111 1111 1111 1111 1011
1111 1111 1111 1111 1111 1111 1101 1000
其结果与 -5*2*2*2 完全相同。
5>>3=0
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0000
其结果与 5/(2*2*2) 完全相同。
5<<3=40
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0010 1000
其结果与 5*2*2*2 完全相同。
-5>>>3=536870911
1111 1111 1111 1111 1111 1111 1111 1011
0001 1111 1111 1111 1111 1111 1111 1111
无论正数、负数,它们的右移、左移、无符号右移 32 位都是其本身,比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。
一个有趣的现象是,把 1 左移 31 位再右移 31 位,其结果为 -1。
0000 0000 0000 0000 0000 0000 0000 0001
1000 0000 0000 0000 0000 0000 0000 0000
1111 1111 1111 1111 1111 1111 1111 1111
位逻辑运算符
包括:
& 与;| 或;~ 非(也叫做求反);^ 异或
“& 与”、“| 或”、“~ 非”是基本逻辑运算,由此可以演变出“与非”、“或非”、“与或非”复合逻辑运算。“^ 异或”是一种特殊的逻辑运算,对它求反可以得到“同或”,所以“同或”逻辑也叫“异或非”逻辑。
例子:
5&3=1
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0001
-5&3=3
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0011
5|3=7
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0111
-5|3=-5
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1011
~5=-6
0000 0000 0000 0000 0000 0000 0000 0101
1111 1111 1111 1111 1111 1111 1111 1010
~-5=4
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0100
5^3=6
0000 0000 0000 0000 0000 0000 0000 0101
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0110
-5^3=-8
1111 1111 1111 1111 1111 1111 1111 1011
0000 0000 0000 0000 0000 0000 0000 0011
1111 1111 1111 1111 1111 1111 1111 1000
其他知识补充:
原码、反码(原码取反)、补码(反码+1)
再举一例,我们来看整数-1在计算机中如何表示。
假设这也是一个int类型,那么:
1、先取1的原码:00000000 00000000 00000000 00000001
2、得反码: 11111111 11111111 11111111 11111110
3、得补码: 11111111 11111111 11111111 11111111
可见,-1在计算机里用二进制表达就是全1。16进制为:0xFFFFFF。
转载于:https://www.cnblogs.com/rongxh7/archive/2011/03/01/1968479.html
Java 中的位运算相关推荐
- JAVA中的位运算操作
1.名词解释 首先,位移运算仅针对整数,非整数不支持位移运算. ①<<:左移操作符,低位补0. ②>>:算数右移符,高位补符号位. ③>>>:逻辑右移符,高位 ...
- 关于java中的位运算
问题:为什么第一种写法循环到8和9的时候,结果和预期不一样, 如果程序将11111110当成10进制的数(十进制11111110的二进制为101010011000101011000110) 那么前 ...
- 位运算java_Java中的位运算
Java中的位运算,说实话,工作了两年的时间里,从来没有用过一次,因为平时都是些的是业务代码,很少接触比较底层的东西,我记得第一次在代码中看到还是在HashMap的Hash算法中看到的,这次重拾Jav ...
- HashMap中的位运算
Java 8 中 HashMap 的实现使用了很多位操作来进行优化.本文将详细介绍每种位操作优化的原理及作用. Java 中的位运算 位操作包含:与.或.非.异或 移位操作包含:左移.右移.无符号右移 ...
- Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位
Java 位运算理解 Java中的位移运算整理 Java右移n位 Java左移n位 一.概述 1.在浏览一篇文章时,看到一个介绍 ,使用位移操作替代乘除法 ,若位移多位该怎么计算呢? 二.代码理解 ...
- Java整形位运算避免精度缺失,中国大学MOOC: 在Java语句中,位运算操作数只能为整型或______数据。...
中国大学MOOC: 在Java语句中,位运算操作数只能为整型或______数据. 答:字符型 YEAR(date)函数返回值的数据类型是 答:int 青色食物应 木,红色食物应 火,黄色食物应 土,白 ...
- Java中「与运算,或运算,异或运算,取反运算。」
Java中「与运算,或运算,异或运算,取反运算.」 文章目录 Java中「与运算,或运算,异或运算,取反运算.」 Java中的「与运算(AND) & 」 规则 :都为1时才为1,否则为0 Ja ...
- Java中的 移位 运算
Java中的 移位 运算 正数 左移 右移 无符号右移 负数 右移 无符号右移 左移 下面通过代码来演示: (在注释中 会标明 移位运算的 一些理论 ) public class Move {publ ...
- 解析java中的除法运算和取模运算
解析java中的除法运算和取模运算 A.除法运算 a.含义及其语法 除法运算就是被除数除以除数的这一过程 语法: 被除数/除数 注意:除数不能为0,且被除数和除数都得是数字 b.应用场景 1.和取模运 ...
最新文章
- “躲避球”体育游戏《Sparc》登陆Rift和Vive,可以和PS用户一起玩了【附游戏视频】
- 天文学家搞医术,Science也挡不住
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1103:陶陶摘苹果
- docker实战系列之搭建rabbitmq
- python substr_python数据分析-数据对象(一)
- mysql会对同时读取加锁吗_程序员经典面试题,MySQL并发读写的时候,都是需要加锁的么?...
- 垂死病中惊坐起_我如何开始恢复垂死的软件团队的过程
- 【Spring】HttpMessageConverter的作用及替换
- python 其他语言_谈谈Python和其他语言的区别
- php银行学生助学贷款管理系统
- 百度网盘高速直链提取
- linux超市参数,TI AM5708开发板产品参数介绍
- 惠普微型计算机 使用教程,惠普打印机怎么用 打印机使用注意事项【图文教程】...
- 神奇宝贝:面向开发人员的免费RESTful神奇宝贝API
- 万丈高楼平地起,开始给Java打地基
- 多目标优化详解【转载】
- PCB焊接及上电测试流程
- 前端如何实现选项卡效果?
- NC6自助开发文件存放路径及一些总结以及修改自助登录界面的样式、图片、添加文字提示等文件
- 全自动化学加药装置循环水应用介绍
热门文章
- 霍金一生重要时刻照片合集,3次来中国,年轻时也是帅哥一枚
- 为什么个体户贷款那么难
- Visual Studio 2008 Beta 2 VPC寿命延长
- 状态机在VHDL中的实现
- python文本清洗_【python】TXT文本数据清洗和英文分词、词性标注
- java数组如何相加_java数组排序,并将数组内的数据求和
- 7-7 六度空间 (30分)_现役球员中,谁最可能成下一位30000分先生?3大前十巨星没戏...
- php自定义能过滤器,过滤器与自定义过滤器的介绍
- Unity shader图集Atlas下的UV坐标归一化转换
- GameObject数组逐渐消失