我正在尝试在c中创建宏,其目的是按照相反的顺序重写数组中每个单元的位,例如,如果单元A [1]为:1100,则最终单元A [1]将为:0011 。
我已经创建了宏,但是有编译问题。请让我知道我错了(我敢肯定它看起来会更紧凑,但我不知道自己缺少什么)。
#include <stdio.h>
#define REVERSE(array, type) \
( \
type * p; \
unsigned (type)=mask1, mask2, test;\
mask1=1;\
mask2=mask1<<(sizeof(type)-1);\
for(p=(array);p ;p=p+1){\
while((mask1=<<1)<(mask2=>>1)){\
if(((*p)&mask1)!=((*p)&mask2)){\
if((*p)&mask1==0){\
*p=*p|mask1;\
*p=*p^mask2;\
}else{\
*p=*p^mask1;\
*p=*p|mask2;\
}\
}\
} \
)
int main(){
int i;
int array[]= {1,2,3,4,5};
REVERSE((array), int);
for(i=1; i<5; i++)
printf(" \'%d\' ", array[i]);
return(0);
}
最佳答案
我建议为此使用查找数组。如果类型的大小大于char,则可以使用查找字节,然后将字节移到正确的位置。不用多花钱就能使您的代码运行得更快。长度为256的char(byte)数组很小。 Robert Cartaino in-place bit-reversed shuffle on an array的答案将告诉您我的意思。我认为他的数组可能很短,因为我希望将0xff交换为0xff。他的数组以0x7F结尾。