在C中确定数组元素是否为非负的快速技巧?
我正在写一个函数
int are_non_negatives(int* start, int n) {
...
}
如果n数组start中的所有下一个整数都是非负数,则此函数返回 1 。否则返回 0。
我的问题是是否存在尽可能快地执行此操作的技巧(除了循环和检查每个位置)?
脏/非便携式技巧很好。我也想知道这些。谢谢!
回答
在需要检查所有元素的最坏情况下,您可以利用一个稍微“脏/不可移植”的技巧:在 2 的补码 int 表示中,当且仅当值为负时设置最高位。因此,您可以将它们全部按位或并检查最高位。这可以使用向量指令一次完成批量处理,例如,假设 32 位 int 和 256 位 AVX 指令,一次处理 8 个元素。