右移速度与左移相同的速度测试位
test bit by right shift same speed as left shift?
是这样做
的速度相同的速度#define CHECK_BIT_BOOL(var,pos) ((var>>(pos)) & 1)
AS
#define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
目标是不使用Bool宏,例如:
#define BOOL(x) (!(!(x)))
BOOL(CHECK_BIT(foo, 3));
做得更好: CHECK_BIT_BOOL(foo,3);
一般测试比特问题
当前C编译器在将典型代码转换为最佳机器语言时非常聪明。大多数时候,试图超越编译器将其混淆为生成愚蠢的代码。
Modern CPU一次可以执行多个操作,无论使用其他操作的时间,其他操作都可能会被其他操作所掩盖,并且没有任何区别。的CPU比内存快得多,大多数程序被内存访问比计算更慢。
您的时间编程比通过此类微型量化的运行时收益的任何收益都要有价值得多,除非代码每天在数百万台机器上运行数千次。专注于简单,干净,明显的正确和可理解的代码。下周阅读时,您将非常感谢。
如果pos
是常数,则CHECK_BIT
的速度可能更快,因为无需在运行时进行班次。否则,两者都可能相同。但是,正如您指出的那样,如果您需要将结果约束为零,则需要在CHECK_BIT
之后进行更多工作。
当然,这取决于您的目标平台,如果您的性能要求足够严格以保证担心单个处理器指令的成本,则您必须对真实系统上的真实性能进行介绍和衡量。
check_bit_bool,如果var和pos不在内存中,而是在寄存器中,则check_bit非常快。即使它在内存中 - 您无法更快地获得它(如果VAR为1个字节,您可以通过仅返回结果[VAR 256*8]立即创建256*8结果和返回结果做>>和&amp;)。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 为什么在读取文件大小时文件IO速度会发生变化
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么这个简单的 C++ SIMD 基准测试在使用 SIMD 指令时运行速度较慢?
- C++:分拣的测试速度 - 得到 0.00
- 我的OpenCL测试的运行速度不超过CPU
- 如何将C++的写入速度提高到CrystalDiskMark测试的速度
- Winsock 滞后,测试连接速度
- 右移速度与左移相同的速度测试位
- CPP 中速度性能的测试功能
- C++ STL 容器用作简单缓冲区时速度很慢(我做了一个基准测试)
- 采用组合技术,提高了钻头测试作业的速度
- 测试NTFS, FAT, EXT4的写/读速度
- c++线程速度测试,我做得对吗?
- 如何为模板化类创建小速度测试
- "std::map with mutexes"与并行插入、查找、擦除之间是否有任何速度测试"libcds maps (Michael Hashmap and Split Order List)"?
- 在我的简单测试中,Java在递归算法速度比较上胜过c++