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

在移位运算时,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. c语言链表找姓,急啊!!!求救了 C语言编一个链表,输出姓名和学号就好
  2. 网络配置_Linux网络环境配置
  3. 蓝牙stack bluez学习(1)Stack Architecture
  4. SO_SNDTIMEO和SO_RCVTIMEO
  5. C++之多重继承引发的重复调用
  6. Python的Tkinter点击按钮触发事件
  7. java中上传文件_Java中文件上传下载 --使用Minio
  8. LeetCode 327. 区间和的个数(multiset二分查找/归并排序)
  9. html京东下拉菜单设置,div css下拉导航菜单(图+演示)
  10. 基于socketserver实现并发的socket编程
  11. vba中split用法
  12. c语言中文件指针概念,C语言文件的概念和文件指针
  13. 极域电子教室师生端连接不上怎么解决
  14. 数据库全栈工程师(DevDBOps)低首付、高回报,先就业后付款
  15. 如何通过UTON WALLET数字钱包创建和使用你的元宇宙身份
  16. 最近瞎忙,比较懒撒,所以要收收心,该学习的学习。
  17. 隐马尔科夫模型模型:原理、实现
  18. 带修莫队 的 小优化 (针对yxc版本)
  19. go基准测试bench
  20. CrowdHuman密集行人数据集转换代码(可任意选择某些类别的框)

热门文章

  1. 教你win10原版镜像怎么安装
  2. 小程序毕设作品之微信积分商城小程序毕业设计成品(6)开题答辩PPT
  3. 执行安装操作的时候,出现丢失MSVCR120.dll的解决方法
  4. Unity游戏开发——新发教你做游戏(二):60个Unity免费资源获取网站
  5. 软件测试实例——总结
  6. Latex符号与公式集合
  7. 如何下载安全绿色的代理IP软件
  8. C语言再学习 -- ASCII码表(转)
  9. xtwpro2编程器_zadig v2.4编程软件下载|XTW100编程器软件(附USB驱动) - 驱动无忧
  10. mac格式化sd卡 linux,[原创翻译]为NOOBS格式化SDXC卡(树莓派官方文档)