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

标签 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)))

它们都工作正常。事情是:

  • 有什么可以优化的吗?
  • 可以做得更快吗?

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

最佳答案

您可以通过删除宏来略微加快编译时间,但仅此而已。 Bit twiddling 足够快,所以这应该不是问题。

这是惯用的做法,我不会改变任何事情。

关于c++ - 设置和取消设置 64 位整数中的特定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14092179/

相关文章:

c++ - 我可以使用哪个工具来跟踪 C++ 程序中每个函数的效率?

c - union 中的 printf 值取决于格式

c++ - 模板定义宏

c - .c 文件中使用的宏在不添加定义它的头文件的情况下进行编译

c++ - 在 C++ 中使用邻接表的图形

c++ - 是否可以使用c/c++创建一个即使主线程退出也不退出的线程?

c++ - 添加到包含 vector 值的无序映射

c - 从不兼容的指针类型初始化 [Android CAF 内核]

c - 在 C 中实现最小堆 - 使用数组?

macros - 宏定义中的"Too few positionals"