![]() |
1
4
对:
这种乘法
|
![]() |
2
2
为什么不把蒙版和值都放在正确的位置呢?
然后你可以像这样使用它:
当然,你所拥有的是非常危险的。寄存器写入通常会产生副作用,这些操作:
实际上是两次,而不是一次,就像你想写的那样。另外,为什么不支持0的掩码?如果我想写入整个寄存器(计时器计数匹配或其他什么)?您对该操作有不同的宏吗?如果是,为什么不把它作为这个系统的一部分? 另一个注意事项-如果有人传递的值比掩码的位更多,那么在将该值粘贴到寄存器之前将掩码应用于该值可能是一个好主意。类似:
|
![]() |
3
2
我愿意 考虑 使用位字段为硬件“格式化”位,例如:
编辑: 注意评论中的后续讨论。虽然存在反对使用位域的有效论据,但在我看来,这也有好处(尤其是在语法方面,我非常重视)。我们应该根据使用代码的环境来决定。 |
![]() |
4
1
如果您坚持这个特定的接口(字段的位置是由掩码定义的),那么在您的实现中唯一可以更改/改进的事情可能是将值转移到适当的位置(将其与掩码对齐)的循环。基本上,你要做的就是找到 抵消 以位数表示,值左移该位数。您使用一个简单的循环来执行该操作,而不是显式计算以位为单位的偏移量,而是在每次迭代中将值左移1位。这会奏效的。然而,它可能被视为效率低下,尤其是对于位于寄存器上部的字段,因为它们将需要移位循环的更多迭代。 为了提高效率,您还可以使用任何一种非常著名的、可能更有效的方法来计算偏移值,如中所述 this page . 不过,我不知道在你的情况下,这是否值得付出努力。它可能会提高代码的效率,但也可能降低代码的可读性。自己决定。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 3 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |