文章目录

  • 移位运算
    • 左移 << 位运算符
    • 右移 >> 位运算符
    • 无符号右移 >>> 运算符

移位运算

移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。移位运算符有左移 <<,右移 >>,无符号右移 >>> 这几种。

左移 << 位运算符

运算规则:按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。

首先来看它在 Java 中的使用:

int a = 10;
System.out.print(a << 2);// 将变量a的二进制的值向左移动两位

执行结果:40

首先我们先将 a 的值转化为二进制的形式。

00000000000000000000000000001010 // a值的二进制
上面将变量 a 的二进制的值使用左移 << 位运算符向左移动两位,而根据它的使用规则可以看出,我们需要将最左边的两个数,也就是两个 0 给移除,后面的数字整体向左移两位,最右侧空出的两个位置用 0 补齐,那它的最后结果就应该是:

00000000000000000000000000001010 // a值的二进制
00000000000000000000000000101000 // 使用左移 << 位运算符向左移动两位后的二进制值
而 00000000000000000000000000101000 的十进制形式就是 40 。

右移 >> 位运算符

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

首先来看它在 Java 中的使用:

int a = -3;
System.out.print(a >> 2);// 将变量a的二进制的值向右移动两位

执行结果:-1

正负整数在 Java 中以二进制补码形式表示,a 的值为 -3,所以 a 的二进制形式为:

11111111111111111111111111111101 // a值的二进制
注意:负数最高位取1,正数取0,关于补码的相关知识可自行了解,本课程不负责讲解。

上面将变量 a 的二进制的值使用右移 >> 位运算符向右移动两位,而根据它的使用规则可以看出,我们需要将最后两位的两个数,也就是 0 和 1 给移除,前面的数字整体向后退两位,前面空出的两个位置用符号位补齐,也就是如果这个数是正数,就补 0,负数的话就补 1,而这里 a 的值为负数,那它的最后结果就应该是:

11111111111111111111111111111101 // a值的二进制
11111111111111111111111111111111 // 使用右移 >> 位运算符向右移动两位后的二进制值
11111111111111111111111111111111 的十进制形式是 -1,故 -3 右移两位的结果是 -1。

无符号右移 >>> 运算符

运算规则:与右移 >> 位运算符的移动方向相同,区别是在移动后空出的高为上补 0,即不考虑被移动整数的正负情况,只使用 0 进行补位。

首先来看它在 Java 中的使用:

int a = -3;
System.out.print(a >>> 2);// 将变量a的二进制的值向右移动两位

执行结果:
1073741823

首先我们先将 a 的值转化为二进制的形式。

11111111111111111111111111111101 // a值的二进制
上面将变量 a 的二进制的值使用无符号右移 >>> 位运算符向右移动两位,而根据它的使用规则可以看出,我们需要将最后两位的两个数,也就是 0 和 1 给移除,前面的数字整体向后退两位,前面空出的两个位置用两个 0 补齐,那它的最后结果就应该是:

11111111111111111111111111111101 // a值的二进制
00111111111111111111111111111111 // 使用无符号右移 >>> 位运算符向右移动两位后的二进制值
而 00111111111111111111111111111111 的十进制形式就是 1073741823 。

Java位运算之移位运算相关推荐

  1. Java从入门到精通08-二进制、位运算、移位运算

    Java从入门到精通08-二进制.位运算.移位运算 二进制(Binary)数用0和1两个数字及其组合来表示任何数.进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右到左 ...

  2. Java中的位运算符、移位运算

    一.位运算 Java中有4个位运算,它们的运算规则如下: (1)按位与 (&)  :两位全为1,结果为1,否则为0: (2)按位或  (|)   :两位有一个为1,结果为1,否则为0: (3) ...

  3. Java二进制位运算、移位运算、、

    为什么80%的码农都做不了架构师?>>>    Java二进制位运算.移位运算 思考题 1.请看下面的代码段,回答a,b,c,d,e结果是多少? public static void ...

  4. java 位与运算_java中位运算和移位运算详解

    一.位运算 (1)按 位 与 & 如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0.首先我们看一下对正数的运算 分别看一下正数和负数的具体运算步骤 正数直接取二进 ...

  5. 【JAVA】什么是移位运算

    移位运算 引言 1️⃣什么是移位运算 2️⃣用法 左移位运算 `<<` 替换乘法

  6. Java 位运算符和移位运算符

    参考: Bitwise and Bit Shift Operators <Java 编程思想 第3章 操作符> 今天学习 Java BitSet 类时,发现对于位运算符和移位运算符的操作有 ...

  7. 计算机中逻辑移位示意图,定点数运算之移位运算(收藏)

    一.移位运算 1.移位的意义 移位运算在日常生活中常见.例如15米可写作1500厘米,单就数字而言,1500相当于小数点左移了两位,并在小数点前面添了两个0:同样15也相当于1500相对于小数点右移了 ...

  8. Java位运算符和移位运算符详解

    位运算符主要针对二进制,它包括了:"与"."非"."或"."异或". 移位运算符包括,"左移运算符" ...

  9. java 二进制反码_Java学习第五篇:二进制(原码 反码 补码),位运算,移位运算,约瑟夫问题...

    public classDemo3 {public static voidmain(String[] args) { CycleLinkList cycleLinkList=newCycleLinkL ...

最新文章

  1. mysql declare 赋值_sql server和mysql变量赋值的区别 以及 MySql Declare(转)
  2. 思科交换机配置试题_(思科配置试题可以略过)
  3. restful规范和APIView
  4. 嵌套函数,匿名函数,高阶函数
  5. Java和pathion_Spring配置中的classpath:与classpath*:的区别
  6. div中文字,图片居中对齐,兼容FF、IE
  7. (44)FPGA面试题CMOS和TTL电路区别
  8. 自学python要看哪些书-想学习Python做数据分析,应该看哪些书?
  9. python提取列表中文本_Python正则表达式:从文本文件中提取关键字后的元组列表...
  10. HDFS API操作的访问方式及JUnit测试类的使用
  11. 一个非常经典的erp教程
  12. shell脚本中,for的用法
  13. java生成word排版_java生成word的几种方案(转)
  14. WPS国际版2019 中文
  15. Python数据分析学习系列 九 绘图和可视化
  16. GoLand/GO项目配置与使用
  17. 高斯金字塔和拉普拉斯金字塔实现图像融合
  18. 记一次在VMware中安装黑苹果的经历
  19. Navicat使用pgSQL报错不能建表
  20. k8s admission webhook初探

热门文章

  1. 在线压缩文档工具、迅捷压缩在线
  2. java将jfif格式转换成ipg_jfif是什么格式?Win10将图片JFIF格式转成JPG格式的方法
  3. Mysql导入数据库报 [ERR] 1118 - Row size too large (> 8126). Changing some columns to TEXT or BLOB
  4. WPS的自动备份与恢复
  5. matlab costas c1 c2,costas.m 源代码在线查看 - 用matlab建立模型设计fpga 资源下载 虫虫电子下载站...
  6. 树莓派mysql安装失败- 解决方案
  7. 去掉Office 2007 正版增值加载项五角星
  8. php实现 阿里云视频合成 (音频+视频+图片)
  9. Allegro如何设置创建Pin Pair的快捷键操作指导
  10. shell for循环遍历数组