设置和取消设置64位整数中的特定位

Dr.*_*eon 4 c c++ macros 64-bit bit-manipulation

好吧,我想要的是非常直接的:

  • 设置数字的第N位(=使其为'1')
  • 取消设置数字的第N位(=使其为'0')

到目前为止这是我的代码(以2个宏的形式):

#define SETBIT(X,Y)     X|=(1ULL<<(Y))
#define UNSETBIT(X,Y)   X&=(~(1ULL<<(Y)))
Run Code Online (Sandbox Code Playgroud)

他们都工作正常.事情是 :

  • 有什么可以优化的吗?
  • 它会变得更快吗?

(两种操作都应该每秒执行数百万次,因此性能非常重要).

Luc*_*ore 6

你可以通过摆脱宏来略微加快编译时间,但这就是它.比特小的速度足够快,所以它应该不是问题.

这是这样做的惯用方式,我不会改变一件事.

  • 好吧,对我而言,"边缘"意味着大致"与边缘情况相关"或"几乎不可察觉",我不同意这在编译时间上甚至会产生微小的差异.但是,评论不是为了辩论,所以让我们留待它. (3认同)