我正在尝试在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结尾。

08-05 04:53