C语言高手请解释下这段代码的具体意思。。。

来源:百度知道 编辑:UC知道 时间:2024/06/09 07:38:27
unsigned int
reversw_bits(unsigned int value)
{
unsigned int answer;
unsigned int i;
answer=0;
for(i=1;i!=0;i<<=1){
answer<<=1;
if(value&1)
answer|=1;
value>>=1;
}
return answer;
}
这段程序旨在把value的二进制位模式从左到右变换一下,例如00001011变为11010000.还请高手解释一下这段代码如何实现的,如i的作用是什么?for循环请解释一下。

unsigned int reversw_bits(unsigned int value)
{
unsigned int answer;
unsigned int i;
answer=0;
for(i=1;i!=0;i<<=1)
{
answer<<=1; // answer左移一位
if(value&1) // 如果value最后一位为1
answer|=1; // answer最后一位赋1
value>>=1; // value右移一位
}
return answer;
}

i 的作用:int的位数跟机器有关,i的作用是使循环的次数和位数相等,另外提一下:char在几位机上都是1个字节,int在16位机上是2字节,32位机是4字节(一个字节有8位)

哪还不懂的话可以再问我
.
.

当然有区别啦!虽然前边没有影响,但最后一次循环时会产生错误。如果先赋值后移位,最后一次循环中if(value&1) answer|=1; 已经得到最后结果,再answer<<=1; 显然就错了

把value里面的1从后往前逐个取出
然后拼接成一个新数

for(i=1;i!=0;i<<=1),当移动位数和机器位数相同时,1会溢出,i变为0

感觉上写得不好,可改进的地方很多
至少那个if就是多余

unsigned int
reversw_bits(unsigned int value)
{
unsigned int answer;
unsigned int i;
answer=0;
for(i=1;i!=0;i<<=1){
answer<<=1;
ans