我正在使用unsigned char
存储 8 个标志。每个标志代表一个立方体的角。因此00000001
,角 101000100
将是角 3 和 7 等。我目前的解决方案是对&
1、2、4、8、16、32、64 和 128 的结果,检查结果是否不为零并存储角。即,if (result & 1) corners.push_back(1);
。我有没有机会摆脱那个'if'语句?我希望我可以用按位运算符摆脱它,但我想不出任何东西。
关于我为什么要摆脱 if 语句的一些背景知识。这个立方体实际上是一个体素,它是大小至少为 512x512x512 的网格的一部分。那是超过 1.34 亿个体素。我正在对每个体素进行计算(嗯,不完全是,但我不会详细介绍,因为它在这里无关紧要),这是很多计算。我需要每帧执行这些计算。每个函数调用的任何速度提升都将有助于这些计算量。为了给你一个想法,我的算法(在某些时候)需要确定浮点数是负数、正数还是零(在一些错误内)。我在那里有 if 语句,并且大于/小于检查。我用一个快速的 float to int 函数替换了它,并缩短了四分之一秒。目前,128x128x128 网格中的每一帧需要 4 秒多一点。