[代码]高低位交换
序:应同学的一个要求写的,一开始在网上找了一下,找不到相关的,只要自己下了一个,在此留个纪念……
要求:
写一个函数,参数为一个无符号整数,返回值为该数高低位互换后的数。比如,带入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);
}
#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);
}

浙公网安备 33010602011771号