开发平台(Platform): (Ex: Win10, Linux, ...)
Linux
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
我看到了一个奇怪的位反转程式
看他用for loop跑得很忙
但看一看感觉他实际效果只是将代入的x值往右shift一次
然后将第31位元开始的左边都滤掉,最后将结果喂给y去return
为何他不干脆简单的写return (x >> 1) & 4294967295就好了呢? 却要写得这么复杂?
(而且,这样的动作也不是位反转吧?...这函式如此命名,但一点注解都没有...)
请问我是不是误会了什么? 或是没注意到这function的真正意义?
真的非常谢谢各位
程式码(Code):(请善用置底文网页, 记得排版)
好读版: http://codepad.org/pzWWrf55
纯文字版:
unsigned long bitreverse(unsigned long x)
{
int i;
unsigned long y = 0;
for (i = 0; i < 32; i++) {
y <<= 1;
y |= (x >> (32 - i)) & 1;
}
return y;
}
补充说明(Supplement):