博客
关于我
JAVA中>>,>>>,<<的区别
阅读量:611 次
发布时间:2019-03-13

本文共 1634 字,大约阅读时间需要 5 分钟。

二进制移位操作在Java中的应用

在计算机编程中,二进制移位操作是处理数值时常用的基本操作之一。Java中的移位操作包括右移(>>)、无符号右移(>>>)、左移(<<)等操作,这些操作对数值的二进制表示具有不同的影响。以下将从基本原理到实际应用,详细解释这几种移位操作。

1. 右移(>>)

右移操作是指将二进制数的各位向右移动,而右移的方向与数值的符号相关。具体来说,对于有符号数来说,右移操作会移动所有位,包括符号位。在Java中,右移操作符>>默认为无符号右移,但如果使用的是>>,则会根据符号进行移位。

例如,考虑整数 -1 的二进制表示为 11111111 11111111 11111111,假设用于32位整型数。当我们执行 -1 >> 1 时,会将所有位向右移动一位,得到的结果为 01111111 11111111 11111111 11111111,即数值 1

代码示例:

int h = -1;System.out.println(Integer.toBinaryString(h));  // 输出:11111111 11111111 11111111 11111111int h1 = h >> 1;System.out.println(Integer.toBinaryString(h1));  // 输出:01111111 11111111 11111111 11111111

2. 无符号右移(>>>)

无符号右移操作符>>>在移位时,会保持符号位不变,同时去除低位部分。与有符号右移不同,无符号右移不会改变符号位的值,而是将移位后的空位填充为0。

以同样的例子 -1 为例,执行 -1 >>> 1 的操作,结果为 00000000 00000000 00000000 00000001,即数值 1

代码示例:

int h = -1;System.out.println(Integer.toBinaryString(h));  // 输出:11111111 11111111 11111111 11111111int h1 = h >>> 1;System.out.println(Integer.toBinaryString(h1));  // 输出:00000000 00000000 00000000 00000001

可以看到,无符号右移操作结果中的符号位为0,二进制位的数量保持不变。

3. 左移(<<)

左移操作与右移操作相反,是指将二进制数的各位向左移动。左移操作不会改变符号位的值,而是在移位后,低位的空位会被填充为0。左移操作适用于移除高位的数位,使得数值得到缩小。

以整数 -1 为例,执行 -1 << 1,二进制表示为 11111111 11111111 11111111,左移一位后,变为 11111111 11111111 11111111 00000000,即数值仍为 -1(因为符号位未变)。

代码示例:

int h = -1;System.out.println(Integer.toBinaryString(h));  // 输出:11111111 11111111 11111111 11111111int h1 = h << 1;System.out.println(Integer.toBinaryString(h1));  // 输出:11111111 11111111 11111111 00000000

4. 有无符号左移(<<<<)?

关于左移操作是否有符号左移,这需要明确一下。在Java中,左移操作<<是有符号左移,处理时符号位不会改变,因此左移操作不会改变数值的符号。

总结

通过以上几种移位操作的对比,我们可以看到它们在处理数值时的不同之处。右移和无符号右移操作分别用于处理正数和负数,而左移操作则用于移除高位位。在实际编程中,选择正确的移位操作符对于数值的正确处理至关重要。

转载地址:http://dskaz.baihongyu.com/

你可能感兴趣的文章
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>