首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java“位移位”教程?

Java“位移位”教程?
EN

Stack Overflow用户
提问于 2011-06-06 17:36:30
回答 8查看 86.8K关注 0票数 46

我将非常感谢一个很好的教程,它为java新手解释了如何在java中进行所有的“位移位”工作。

我总是偶然发现它,但从来不明白它是如何工作的。它应该解释java中字节移位/位操作的所有可能的操作和概念。

这只是我的一个例子(但我正在寻找一个教程,它解释了所有可能的操作):

代码语言:javascript
运行
复制
byte b = (byte)(l >> (8 - i << 3));
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2011-06-06 17:39:45

好的,官方的Java教程Bitwise and Bit Shift Operators涵盖了Java中可用的实际操作,以及如何调用它们。

如果您想知道“我能用位移位做什么”,那么这不是Java特有的,而且由于它是一种低级技术,我不知道有什么“可以做的很酷的事情”列表。熟悉这些定义是值得的,并让你的眼睛睁大眼睛看看其他使用它的代码,看看他们都做了些什么。

请注意,经常的比特闲置是以牺牲清晰度为代价的效率提升。例如,a << 1通常与a * 2相同,但可以说不那么清楚。重复XOR可以在不使用临时变量的情况下交换两个数字,但通常认为使用临时变量更清晰地编写代码更好(或者在实用方法中更好)。因此,在这方面很难给出很好的例子,因为您不太可能在体系结构级别上实现任何新的或深刻的东西;它都是关于低级细节的。(我估计,大量的比特闲置的使用都是过早优化的例子。)

票数 34
EN

Stack Overflow用户

发布于 2012-11-08 04:44:14

使用移位运算符时,要非常小心,不要重复常见的错误!!

正如下面的SO post所建议的,公认答案的作者提到:

“在某些语言中,将移位运算符应用于任何小于整数的数据类型会自动将操作数大小调整为整数。”

例如,当操作字节时,记住这一点绝对至关重要,否则你可能会得到意想不到的结果(就像我做的那样)。

给定一个具有以下位模式的字节:

代码语言:javascript
运行
复制
1001 0000

当我尝试将位移位4,并将其赋值给int时,例如:

代码语言:javascript
运行
复制
int value = byteValue >>> 4;

我期望有:

代码语言:javascript
运行
复制
0000 1001   (or a value of 9)

但我会得到一个巨大的数字!这是因为在位移位操作之前,byteValue被强制转换为int ,因此导致如下所示:

代码语言:javascript
运行
复制
1111 1111 1111 1111 1111 1111 1001
票数 15
EN

Stack Overflow用户

发布于 2011-06-06 17:41:45

有无数种可能的组合。但是,它们将由一个或多个组合组成

代码语言:javascript
运行
复制
>> shift right with sign extension.
>>> shift right with out sign extension.
<< shift left.

为了获得理解,我建议您将二进制数写在纸上,并计算出发生了什么。试图在教程中阅读它并不能保证理解。特别是如果他们到目前为止还没有帮助的话。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6250114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档