gpt4 book ai didi

c# - 修改字节中的特定位

转载 作者:行者123 更新时间:2023-12-02 03:52:29 24 4
gpt4 key购买 nike

我需要修改(!不是切换异或!)字节值中的特定位。我有:

  1. 字节(例如b11010010);
  2. 要修改的位索引(例如 4);
  3. 位的新值(01)。

现在,我需要什么。如果新值为 0,则位 [4] 必须设置为 0。如果新值为 1,则位 [4] 必须设置为 1

一般部分:

var bitIndex = 4;
var byte = b11010010;
var mask = 1 << bitIndex;
var newValue = 1;

这是最简单的方法:

if(newValue == 1)
byte |= mask; // set bit[bitIndex]
else
byte &= ~mask; // drop bit[bitIndex]

另一种方法允许在没有 if else 语句的情况下执行此操作,但看起来很难理解:

byte = byte & ~mask | (newValue << bitIndex) & mask

这里,第一个 AND 丢弃 bit[bitIndex],第二个 AND 计算 bit[bitIndex] 的新值>,并且 ORbit[bitIndex] 设置为计算值,无论是 0 还是 1

有没有更简单的方法将特定位设置为给定值?

最佳答案

(newValue << bitIndex)只设置了一个位,不需要 & mask .

所以你只有 5 个操作。

byte = byte & ~(1 << bitIndex) | (newValue << bitIndex); // bitIndex'th bit becomes newValue

它仍然足够复杂,值得评论,但很容易看出评论是正确的,因为它是两个容易识别的操作链接在一起(不像当前接受的答案,这需要每个读者坐下来思考一个分钟)

关于c# - 修改字节中的特定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44996389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com