【发布时间】:2016-04-05 09:21:09
【问题描述】:
我想将字节的最后三位设置为特定值。归档此目标的最佳方式是什么?
我至少能想到两种解决方案……假设我有以下字节:1101 0110,并且想将最后三位设置为 011。
解决方案 1:
1101 0110
&1111 1000 //and with mask to clear last three bits
|0000 0011 //add the target bits
解决方案2:
1101 0110 >> 3 //shift right to remove last three
0001 1010 << 3 //shift left to clear last three
|0000 0011 //add target bits
有没有更好/更短/更有效的方法?
【问题讨论】:
-
毫无疑问,性能影响将是无限小的。但这个问题更多的是关于我对以最有效的方式编码事物的热情。所以速度的提高可能真的很小,但这是否是用较慢的方式编写它的原因,当它快速编写时只是代码中或多或少几个字符的问题......?
-
这些优化的问题在于它们高度依赖于架构。 x68 上的 fastet 在三核上并不是最快的。您的架构手册应该能够为您提供轮班所需的周期数与 & 所需的周期数的信息。
-
看,用显而易见的方式,易于理解的方式。易于调试的方式。 99.9% 的家庭开发人员会立即使用位掩码并继续进行重要的设计决策。
标签: c bit-manipulation bitwise-operators bit bit-shift