java - 简单问题 - 在 Java 中更改位

标签 java

我有一个简单的问题 - 我需要为我的程序编写一个函数来更改给定字节的第 3 位。

我写了那些行:

public byte turnOn(Byte value)
{
    int flag = 8;
    value = (byte) (value | flag);
    return value;
}

我不确定这样做是否正确,因为我也看到过这种方式(我不熟悉)

value = (byte) (value | (1 << 2) );

哪种方式更好,1 << 2 是什么意思(2 表示第三位,但 1 是什么)

谢谢!

最佳答案

1 << 2表示 1 向左移动两位。由于左移一位类似于乘以二,因此得到 4。在二进制中,这是

00000100

即从右数第 3 位已设置。

常量 1之所以使用,是因为该数字仅设置了一个位 - 最右边的位。左移后,只设置第 3 位(右起):

00000001 original value
00000010 after shifting left once
00000100 after shifting left again

我更喜欢使用 1 << 2而不是像 8 这样的常量,因为它使设置的位更清楚。它还可以防止您无意中使用设置了多个位的常量——当然,除非您确实想要这样做。即便如此,为了清楚起见,我认为将几位加在一起会更清楚:

final int bitsToSet = (1 << 2) + (1 << 5);

关于java - 简单问题 - 在 Java 中更改位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6243682/

相关文章:

java - MemoryCacheImageOutputStream 到 BufferedImage

java - 如何在 Apache Lucene 6.5 中同步 RAMDirectory 与 FSDirectory

java - 定时quartz任务执行时长

java - 具有特定数字的浮点精度

java - 我无法在我的 OSGI 包中加载 HelpGUI

java - 我想通过Java访问rundeck并获取失败的作业列表并重新启动它们

java - 如何获取新替换字符串的新值?

java - 云上的ReSTLet webService

java - android studio 中缺少fragment_main xml

java - 使用 AdMob 旋转时 Android 应用程序崩溃