我有一个简单的问题 - 我需要为我的程序编写一个函数来更改给定字节的第 3 位。
我写了这些行:
public byte turnOn(Byte value)
{
int flag = 8;
value = (byte) (value | flag);
return value;
}
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是正确的方法,因为我也看到了这种方式(我不熟悉)
value = (byte) (value | (1 << 2) );
Run Code Online (Sandbox Code Playgroud)
哪种方式更好, 1 << 2 是什么意思(2 表示第三位,但 1 是什么)
谢谢!
1 << 2表示 1 向左移动两位。由于左移一位类似于乘以 2,因此结果为 4。在二进制中,这是
00000100
Run Code Online (Sandbox Code Playgroud)
即从右数第 3 位被设置。
使用常量1是因为该数字只有一个位集 - 最右边的位。左移后,只设置第 3 位(从右起):
00000001 original value
00000010 after shifting left once
00000100 after shifting left again
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用1 << 2而不是像 一样的常量8,因为它可以更清楚地说明正在设置的位。它还可以防止您无意中使用设置了多个位的常量 - 当然,除非您确实需要。即便如此,为了清楚起见,我认为将几位加在一起会更清楚:
final int bitsToSet = (1 << 2) + (1 << 5);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2570 次 |
| 最近记录: |