java中的移位运算符有三种:

1、 <<: 左移

2、 >>: 右移

3、 >>>: 无符号右移

使用方法:左移就是将左边的操作数在内存中的二进制数据左移指定的位数,左边移空的部分补零,右移:如果最高位是0,空位就填0,如果最高位是1,空位就填1。无符号右移无论最高位是什么,空位都补零。

数据在内存中以补码的形式存储

左移和右移的数学意义:

对于左移,对于整型a,  a<<n=a*2^n(前提是结果在整型的范围之内),对于右移 正的整型a,  a>>n=a/2^n,对于负的整型a,a>>n=-(|a|/2^n+1);

为什么对于右移,正数和负数的结果不一样呢?

我们可以看一个例子:

package sort;public class sort1 {public static void main(String[] args) {// TODO Auto-generated method stubint a=-123;System.out.println("原二进制位:"+Integer.toBinaryString(a));int b=a>>2;System.out.println("右移两位结果为:"+b);System.out.println("右移后二进制位:"+Integer.toBinaryString(b));int c=123;System.out.println("原二进制位:"+Integer.toBinaryString(c));int d=c>>2;System.out.println("右移后的结果为:"+d);System.out.println("右移后二进制位:"+Integer.toBinaryString(d));}
}

运行结果为:

对于123,其二进制数为0  1111011,右移两位相当于把0  111000右移两位,而0  111000的十进制为120,所以结果为120/4=30;

对于-123,其二进制数为1  0000101,右移两位相当于把1  0000100右移两位,而1  0000100的十进制为-124,所以结果为-124/4=-31。

转载于:https://www.cnblogs.com/qingergege/p/5687306.html

Java中移位操作运算符的理解相关推荐

  1. 关于java中位运算符的使用和理解

    关于java中位运算符的使用和理解 &(按位与) ' & ' 符号的作用是对运算符的两侧以二进制表达的操作符按位进行'与'运算. 规则: 只有两个操作数对应位同为1时,结果为1,其余全 ...

  2. java中的.运算符_java中的各种运算符

    1.算术运算符: 算术运算符也就是我们小学所学过的:+ - * /:还有取模运算符:%:取模运算符也就是求余的 运算: 运算形式:操作数 + 操作数:操作数 - 操作数:操作数 * 操作数:操作数 / ...

  3. Java中Map集合如何理解(四)——精简

    目录 引言 概念 Map集合实现类 HashMap LinkedHashMap TreeMap 默认排序 自定义排序方式 常用API 遍历Map集合 键找值 键值对 Lambda表达式 结束语 引言 ...

  4. 12 java中instanceof运算符的意义和用法

    java中instanceof运算符的意义和用法 instanceof运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来标识该对象是否为特定类或者它的子类的一 ...

  5. 详细介绍Java中的运算符

    Java中类型转换 不同类型的数据可以在一起运算,需要将他们转换为同一类型,就可以进行运算 Java类型转换的分类 隐式类型转换[自动类型转换] 小范围数据转大范围 byte->short-&g ...

  6. Java中的运算符——逻辑运算符详解

    逻辑运算符主要包括逻辑与( & ),逻辑或( | ),逻辑异或( ^ ),短路与( && ),短路或( || ).所有逻辑运算符的特点是操作数都是布尔类型,并且最终的运算结果也 ...

  7. java中冒号运算符起什么作用呢?

    转自: java中冒号运算符起什么作用呢? 下文笔者讲述java中冒号运算符的功能简介说明,如下所示: 冒号运算符的功能: 1.跳转2.三元表达式3.迭代循环4.断言5.switch6.方法(jdk8 ...

  8. Java中的运算符——赋值运算符详解

    赋值运算符主要是这几种:=.+=.-=.*=./=.%=,其它和二进制相关的内容这里就不详细解释了.赋值类的运算符包括基本赋值运算符(=)和扩展的赋值运算符(+=.-=.*=./=.%=).我们来看一 ...

  9. 8. Java 中的运算符 【连载 8】

    在前面的内容已经学会了如何定义变量和初始化变量.定义变量的目的就是为了操作数据.Java 语言中给我们提供了专门用来操作这些数据的代码符号,统称为"运算符". 按照操作符的用法,我 ...

最新文章

  1. layui导入 加载动画_厉害了!这个免费神器帮你无脑做施工动画
  2. 浅谈依赖注入与控制反转
  3. Heap(堆结构/优先队列)-Swift实现
  4. y7000 intel nvidia 双显卡安装Ubuntu16.04
  5. 思科、华为交换机的一些命令
  6. 电脑C盘满了怎么办?这两种方法都能解决
  7. 【DP】错排问题(ybtoj DP-1-1)
  8. 【渝粤教育】国家开放大学2018年秋季 0299-21T中国古代文学(1) 参考试题
  9. 如何让开关打开_汽车油箱盖如何打开?老司机:不外乎这三种方式
  10. 【PHP学习】—利用ajax原理实现登录功能(八)
  11. Linux ftp命令
  12. 第三章 动态规划-基于模型的RL-强化学习理论学习与代码实现(强化学习导论第二版)
  13. Mysql使用优化之处(转)
  14. Unity世界坐标转换屏幕坐标(测试)
  15. Excel VBA初级系列培训--课时2
  16. 【图像分类】实战——使用ResNet实现猫狗分类(pytorch)
  17. activiti+app+mysql_SpringBoot Activiti6系列教程(一)-activiti-app部署
  18. 2.发那科工业机器人操作规范及坐标系介绍
  19. 电商平台订单获取API接口文档
  20. 写代码的时候,竟然发现了10+个【了不得】的网站,必须分享

热门文章

  1. c 是泛型程序设计语言,c ++中的“泛型编程”是什么意思?
  2. thinkphp 助手函数url不生成https_thinkphp5.0 URL 地址生成
  3. 服务器内提取文件,linux命令如何提取文件夹内特定文件路径
  4. 编译c语言程序时 程序中的注释部分将,C语言程序编译时,程序中的注释部分将 答案:不参加编译,也不会出现在目标程序中...
  5. python默认参数举例_Python之在函数中使用列表作为默认参数
  6. 怎么判断日出时间早晚_云南8日游攻略以及费用,从西安到云南旅游怎么安排行程?...
  7. currenttimemillis 毫秒还是秒_亿级数据毫秒级查询!ElasticSearch是怎么做到的?
  8. android studio socket编程实例
  9. 磁盘io php,PHP CURL如何处理上传内存中文件,避免磁盘IO开销
  10. no amd graphics driver怎么解决_《英雄联盟手游》卡顿怎么解决 游戏设置优化教程...