ds1*_*709 5 c# bitwise-operators
我需要修改(!不是切换异或!)字节值中的特定位。我有:
byte(例如b11010010);4);0位(或)的新值1。现在,我需要什么。如果新值为0,则位[4] 必须设置为0。如果新值为1,则位[4] 必须设置为1。
通用部分:
var bitIndex = 4;
var byte = b11010010;
var mask = 1 << bitIndex;
var newValue = 1;
Run Code Online (Sandbox Code Playgroud)
这是最简单的方法:
if(newValue == 1)
byte |= mask; // set bit[bitIndex]
else
byte &= ~mask; // drop bit[bitIndex]
Run Code Online (Sandbox Code Playgroud)
另一种方法允许在不if else声明的情况下执行此操作,但看起来很难理解:
byte = byte & ~mask | (newValue << bitIndex) & mask
Run Code Online (Sandbox Code Playgroud)
这里,第一个AND删除bit[bitIndex],第二个AND计算 的新值bit[bitIndex],并OR设置bit[bitIndex]为计算值,无论是0还是1。
有没有更简单的方法将特定位设置为给定值?
执行此操作的规范方法是:
byte ^= (-newValue ^ byte) & (1 << n);
Run Code Online (Sandbox Code Playgroud)
如果 newValue == 1,则设置位号 n;如果 newValue == 0,则清除位号 n
| 归档时间: |
|
| 查看次数: |
5056 次 |
| 最近记录: |