c - 有没有办法从未知字节设置/清除位,同时保持所有其他位不变?

我想写一个寄存器。

寄存器保存 1 个字节的信息。为了争论的缘故,我想更改第 6 位。

我现在完成此操作的方法是读取寄存器,然后进行设置/清除。

这样我只改变我感兴趣的部分,其余的保持不变。

例如:

// Read register
uint8_t reading = read_reg(0x00);

// Set 6th bit
if (wanting_to_set) { reading |= (1 << 6); }
if (wanting_to_reset) { reading &= ~(1 << 6); }

// Write back to register
write_reg(0x00, reading);

有没有一种方法可以在不知道字节是什么的情况下设置或重置第 n 位?这样我就可以避免先读取寄存器。

最佳答案

Is there a way I can set or reset the nth bit without knowing that the byte is? This way I can avoid having to read the register first.

在 C 语言中没有执行此类操作的标准方法。即使您有一台具有可单独寻址位的机器,C 语言也没有定义任何以小于 8 位为单位访问内存的方法,无论底层硬件的功能是什么。

因此,在标准 C 中,如果您想修改单个位而不修改附近的任何其他位,那么您必须同时用它们已经具有的相同值覆盖该位附近的至少 7 个位来完成此操作.这意味着您必须要么拥有这些位的当前值,要么不关心写入它们的值是什么。

https://stackoverflow.com/questions/69151729/

相关文章:

flutter - 如何在 flutter 中的行之间写 OR

python - Azure Databricks python 命令显示当前集群配置

laravel - Laravel 中的 getClientOriginalExtension()

java - 为什么 java 编译器不提示 "\s"?

c# - 如何在 C# 中使用预处理器指令仅在 Windows 10 上执行一些代码?

python - 如何找到中轴的关节和端点

c - 栈在使用Pthread的多线程程序中是如何工作的?

c# - Parallel.Foreach 和每个产生不同的结果 : Why is my code

c++ - 在 constexpr 分支中使用枚举类值

docker - 使用 deps.edn 在容器中安装依赖项