【发布时间】:2015-02-05 06:02:28
【问题描述】:
在一次采访中,我被要求将 big_to_little_endian() 实现为宏。我使用移位运算符实现。但面试官希望我进一步优化这一点。我做不到。后来我用谷歌搜索并搜索但找不到它。有人可以帮助了解如何进一步优化此代码吗?
#define be_to_le (((x) >> 24) | (((x) & 0x00FF0000) >> 8) | (((x) & 0x0000FF00) << 8) | ((x) << 24))
【问题讨论】:
-
我觉得不错。也许他正在寻找一些要使用的 ASM 'shuffle' 指令?一个好的编译器不应该这样做吗?
-
旁白:与其重新发明轮子,不如使用
ntohl或您的平台提供的等效项。写完答案后,您可能已经礼貌地添加了这一点:) -
This answer 展示了使用编译器内在函数的最快方法。
标签: c optimization endianness