我有一个简单的问题 - 我需要为我的程序编写一个函数来更改给定字节的第 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/