移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:<>(带符号右移)和>>>(无符号右移)。

在移位运算时,byte、short和char类型移位后的结果会变成int类型,对于byte、short、char和int进行移位时,规定实际移动的次数是移动次数和32的余数,也就是移位33次和移位1次得到的结果相同。移动long型的数值时,规定实际移动的次数是移动次数和64的余数,也就是移动66次和移动2次得到的结果相同。

三种移位运算符的移动规则和使用如下所示:  <

语法格式:  需要移位的数字 << 移位的次数

例如: 3 << 2,则是将数字3左移2位

计算过程:  3 << 2

首先把3转换为二进制数字0000 0000 0000 0000 0000 0000 0000 0011,然后把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,最后在低位(右侧)的两个空位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 1100,则转换为十进制是12.数学意义:

在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。

>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1.

语法格式:  需要移位的数字 >> 移位的次数

例如11 >> 2,则是将数字11右移2位

计算过程:11的二进制形式为:0000 0000 0000 0000 0000 0000 0000 1011,然后把低位的最后两个数字移出,因为该数字是正数,所以在高位补零。则得到的最终结果是0000 0000 0000 0000 0000 0000 0000 0010.转换为十进制是3.数学意义:右移一位相当于除2,右移n位相当于除以2的n次方。

>>>运算规则:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于正数来说和带符号右移相同,对于负数来说不同。

其他结构和>>相似。

小结

二进制运算符,包括位运算符和移位运算符,使程序员可以在二进制基础上操作数字,可以更有效的进行运算,并且可以以二进制的形式存储和转换数据,是实现网络协议解析以及加密等算法的基础。

实例操作:  public class URShift {

public static void main(String[] args) {

int i = -1;

i >>>= 10;

//System.out.println(i);

mTest();

}

public static void mTest(){

//左移

int i = 12; //二进制为:0000000000000000000000000001100

i <<= 2; //i左移2位,把高位的两位数字(左侧开始)抛弃,低位的空位补0,二进制码就为0000000000000000000000000110000

System.out.println(i); //二进制110000值为48;

System.out.println("
");

//右移

i >>=2; //i右移2为,把低位的两个数字(右侧开始)抛弃,高位整数补0,负数补1,二进制码就为0000000000000000000000000001100

System.out.println(i); //二进制码为1100值为12

System.out.println("
");

//右移example

int j = 11;//二进制码为00000000000000000000000000001011

j >>= 2; //右移两位,抛弃最后两位,整数补0,二进制码为:00000000000000000000000000000010

System.out.println(j); //二进制码为10值为2

System.out.println("
");

byte k = -2; //转为int,二进制码为:0000000000000000000000000000010

k >>= 2; //右移2位,抛弃最后2位,负数补1,二进制吗为:11000000000000000000000000000

System.out.println(j); //二进制吗为11值为2

}

}

在Thinking in Java第三章中的一段话:

移位运算符面向的运算对象也是

二进制的“位”。 可单独用它们处理整数类型(主类型的一种)。左移位运算符(<>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。

若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也 是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或 short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。

Java 移位运算符的复合_Java移位运算符相关推荐

  1. java右移位怎么算_Java移位运算符

    一 描述 < >>:右移运算符(算术右移),如果数字为正数时,移位后在前面补0,为负数时,则在前面补1: >>>:无符号右移运算符(逻辑右移),忽略符号,空位补0即 ...

  2. java三元表达式必须返回_java – 三元运算符的右手表达式必须兼容...

    您的方法声明返回类型是String.任何return语句都必须生成一个与声明的返回类型兼容的表达式. 但是,在这种情况下,返回类型可以是int,这解释了编译器拒绝它的原因. 这不是特定于三元运算符的, ...

  3. java位运算符取反_java运算符

    Java 语言支持如下运算符: 算术运算符: +,-,*,/,%,++,-- 赋值运算符 = 关系运算符: >,<,>=,<=,==,!=, instanceof 逻辑运算符: ...

  4. java比较运算_Java比较运算符

    注意哦: 1.  > . < . >= . <= 只支持左右两边操作数是数值类型 2.  == . != 两边的操作数既可以是数值类型,也可以是引用类型 public clas ...

  5. java中左移运算符解释_java左移右移运算符

    位运算(只对byte.short.char.int.long有效) 左移和右移运算相当于实现整数乘以或除以2的n次方 2.7三元运算符表达式1的结果为true时,就为第二个表达式,如果为...... ...

  6. JAVA中常用的逻辑运算符_Java中常用的运算符

    运算符是一种"功能"符号,用以通知 Java 进行相关的运算,Java 语言中常用的运算符可分为如下几种: 算数运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符. 一.算数运 ...

  7. java中的位移运算符_Java 位移运算符

    本人只是 Android小菜一个,写技术文档只是为了总结自己在最近学习到的知识,从来不敢为人师,如果里面有些不正确的地方请大家尽情指出,谢谢! 1.概述 Java 位移运算符是Java中基本的位运算操 ...

  8. java 60进制运算_Java【第二篇】基本语法之--进制、运算符

    进制 生活中的进制:七进制(一周).十二进制(12小时制).二十四进制(24小时制).六十进制(分钟) 对于整数,有四种表示方式: 二进制(binary):0,1 ,满 2 进 1.以 0b 或 0B ...

  9. java中平方的表达式_JAVA语言中的运算符和表达式

    JAVA--运算符 按运算符要求的运算符个数可分为一元.二元.三元运算符: 一元运算符有一个操作数:如正数或者负数前面的"+"."-",和自增"++& ...

  10. java中平方的表达式_Java中的运算符及表达式

    常用的运算符:赋值运算符(=).加法运算符(+).乘法运算符(*).除法运算符(/).括号运算符(( )).余数运算符(%).布尔运算符. 注释符(//).注释的内容为双反斜杠后的内容至换行结束. j ...

最新文章

  1. 良心贴!没想到 Google 排名第一的编程语言,可以这么简单!
  2. 阿里云发布三大人工智能产品:推动AI产业落地
  3. 笔记-项目管理基础知识-复习要点
  4. python中计算如何实现_基于python如何实现计算两组数据P值
  5. 大数据学习笔记27:MR案例——多输入源处理成绩
  6. 这段 JavaScript 代码能挖出你所有的访问记录!
  7. 【数据结构笔记】归并排序(merge_sort)+ 堆排序 -- python2.7
  8. wps中的相交_如何在wps中添加交叉引用 - 卡饭网
  9. 必应搜索结果跳转百度
  10. Wireshark基础知识(一)
  11. 【春节档排片地域可视化分析】
  12. 网页抖音批量取消关注JS代码
  13. 同时删除多个 PDF 文档前几页
  14. 人工智能在几年中快速发展,尖端技术慢慢向普及应用到各行各业
  15. 8个 Chatbot 框架介绍
  16. 人以善感,天以福应,人以恶感,天以灾应,原来天就是自己的镜子呀!
  17. Duda模式分类 ch2 习题
  18. 【笔记】雾计算中移动应用的优先级约束任务调度
  19. 网站建设基本流程规范
  20. 修复好一个科脉软件数据库

热门文章

  1. 计算机网络参考模型与5G协议
  2. 数据库--开发一个房产信息系统实现居民房产信息管理
  3. Python爬虫书籍推荐
  4. 云课堂在登陆时显示服务器错误,我的云课堂不能登陆怎么解决
  5. Linux课堂练习2
  6. python画立体温度分布图_Origin绘制3D立体温度分布图的方法
  7. comsol仿真模型:风力发电机复合材料叶片的应力和模态分析
  8. vue 源码分析(尚硅谷视频学习笔记)
  9. C语言基础程序题及答案(适合学完C基础的人练练手)
  10. Python数据分析-TMDb 5000 Movie Database电影数据分析