gpt4 book ai didi

c - Visual Studio C 编译器中是否有单独的 bitset64 内在函数?

转载 作者:行者123 更新时间:2023-11-30 15:49:02 35 4
gpt4 key购买 nike

我需要将64位整数的第n位设置为1;有一个内在的(记录在这里http://msdn.microsoft.com/en-us/library/z56sc6y4(v=vs.90).aspx):

unsigned char _bittestandset64(
__int64 *a,
__int64 b
);

它可以完成这项工作。我的问题是是否有一种方法可以只进行位设置(无需测试),以及使用 bittestandset64 忽略返回值是否会对性能造成影响。
我也很感兴趣是否有一种方法可以在 GCC 中使用汇编来做到这一点(适用于 Intel Core2 到 i7)。

最佳答案

内在函数的要点是利用特定的处理器指令,并可以选择仍然优化代码。本例中的 BTS、位测试和设置指令。没有专门用于“位设置”的指令。代码生成器将注意您使用结果值。如果您不使用它,那么它也不会生成将进位标志转换为位值的代码。

一个简单的集合,例如:

 _bittestandset64(&bits, 1);

产生:

 000007F6ED6812CE  bts         qword ptr [rax],1 

使用结果值时,例如:

 unsigned char value = _bittestandset64(&bits, 1);

产生:

 000007F7394E14A3  bts         qword ptr [rax],1 
000007F7394E14A8 setb al
000007F7394E14AB mov byte ptr [value],al

你不可能比单个 CPU 指令做得更好,这已经是最好的了。

关于c - Visual Studio C 编译器中是否有单独的 bitset64 内在函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16497027/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com