[代码]高低位交换


序:应同学的一个要求写的,一开始在网上找了一下,找不到相关的,只要自己下了一个,在此留个纪念……

 

要求:
写一个函数,参数为一个无符号整数,返回值为该数高低位互换后的数。比如,带入1,返回0x80000000,带入2返回0x40000000,带入3则返回0xC0000000。要求算法要高效

算法:

依次取出最高位放入目标变量最高位(没放一次,目标变量则向右移一位)

 

#include <stdio.h>
#define BIT_LENGTH 32

unsigned 
int ReverseData(unsigned int DataToReverse)
{
    unsigned 
int temp = DataToReverse;
    unsigned 
int DataAfterReverse = 0;
    unsigned 
int high = 1<<(BIT_LENGTH-1);

    
for(int i=BIT_LENGTH; i>0; i--){
        DataAfterReverse 
= (DataAfterReverse>>1)|(temp&high);
        temp 
= temp<<1;
    }
    
    
return DataAfterReverse;
}

int main(){
    
do{
        printf(
"Please input the int[if exit then input '0']:");
        scanf(
"%d",&ui);
        
if(ui==0)     break;
        printf(
"0x%p => 0x%p\n\n",ui,ReverseData(ui));
    }
while(true);
}
posted @ 2008-10-08 14:37  小黑  阅读(755)  评论(0)    收藏  举报