假设我有一个 len = 2 的字符数组。
char* array = malloc(2);
memset(array, 0, 2);
这是 2 个字节 = 0000000000000000。我怎样才能把它变成 11111111111111111?
我可以用一个 for 循环和一个指针来完成,但我认为这不是最简洁的方法。
最佳答案
假设您的长度 2
恰好在您的示例中,并且您希望无论 char 数组的长度如何都能正常工作。您仍然需要一个循环,但您可以一次反转最多 64 位的二进制值(在 64 位 CPU 上,忽略 SIMD 功能)。如果您真的在寻找最佳性能,则需要了解 SIMD。
您可以在循环的每次迭代中检查数组的剩余长度(您没有反转的值),并一次反转 64、32、16 或 8 位,最大的适合。
关于在 C 中反转 char 数组的二进制值的最干净方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46933141/