三张图学懂移位运算符——有符号移位?无符号移位?

Posted 超人汪小建(seaboat)

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三张图学懂移位运算符——有符号移位?无符号移位?相关的知识,希望对你有一定的参考价值。

本专栏由十年Java开发经验专家编写,本专栏定位于Java基础知识,既适合新手入门又适合老鸟巩固基础知识。一共99节课,每节课只需几毛钱。
作者简介:笔名seaboat,擅长工程算法、人工智能算法、自然语言处理、计算机视觉、架构、分布式、高并发、大数据和搜索引擎等方面的技术,大多数编程语言都会使用,但更擅长Java、Python和C++。平时喜欢看书写作、运动、画画。崇尚技术自由,崇尚思想自由。出版书籍:《Tomcat内核设计剖析》、《图解Java并发》、《图解数据结构与算法》、《人工智能原理科普》。

移位运算符

移位运算符的作用就是对某个整数进行移位操作,它会先将整数转成二进制后再向左或向右进行移位。Java 提供了右移、左移和无符号右移三种移位运算符,符号分别为 >>、<<、>>>。

移位语法

三个移位运算都属于二元运算,需要两个操作数参与。两个操作数的数据类型都必须是整型,包括 byte、short、int 和 long 类型,此外 char 类型也是被允许的。移位运算符的语法如下所示,其中操作数一是待移位的整数,而操作数二是表示需要移动多少位的整数。比如 3>>2 ,表示将 3 以二进制的形式向右移 2 位。

右移位运算

右移位运算符会将整数转为二进制,然后向右移动指定位数,左边将以符号位的值进行填充,而右边超出的部分将被丢弃。

以下面的例子进行详细说明,最终输出结果为 1 和 -4。当 7 向右移动 2 位时,左边将使用符号位进行补充,即补充两个 0,而右边超出的两个 1 则被直接丢弃,移位后最终的结果为 1。继续看 -7 向右移动 1 位的情况,左边使用符号位进行填充,即填充了一个 1,而右边超出的一个 1 直接被丢弃,最终的结果为 -4。

左移位运算

左移位运算符将整数左移动指定位数,此时右边用 0 进行填充,而左边超出的部分则直接丢弃。

同样还是以 7 和 -7 为例,下面例子左移后的结果分别为 28 和 -14。当 7 向左移动 2 位时,右边填充两个 0,而左边超出的两个 0 则直接丢弃,最终结果等于 28。当 -7 左移 1 位时,右边填充一个 0,左边超出的一个 1 直接丢弃,最终结果等于 -14。

无符号右移位运算

无符号右移位运算符能将整数以无符号的形式右移指定位,所谓的无符号就是不管符号位是什么我们都用 0 进行填充,而右边超出的部分则直接丢弃。

仍然以 7 和 -7 为例,下面例子进行无符号右移位后的结果分别为 1 和 2147483644。当 7 无符号右移 2 位时,不管符号位是什么左边都直接填充 0,而右边超出的两个 1 则直接丢弃,运行的结果为 1。当 -7 无符号右移 1 位时,左边直接填充 0,而右边则直接丢弃 1,最终的结果为 2147483644。

以上是关于三张图学懂移位运算符——有符号移位?无符号移位?的主要内容,如果未能解决你的问题,请参考以下文章

三张图学懂移位运算符——有符号移位?无符号移位?

java中的无符号移位运算

有趣的移位操作!彻底弄懂各个移位操作符的使用方式

移位运算符

计算机组成原理 王道考研2021 第二章:数据的表示和运算 -- 定点数的运算(移位加减运算溢出判断符号扩展)

移位运算符