Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bit Operation

Author: Dann Corbit

Date: 19:18:30 05/21/02

Go up one level in this thread


On May 20, 2002 at 02:05:46, James Robertson wrote:

>Is there any assember command to reverse the bits in an integer?
>
>(e.g. 11101010 would become 01010111)

unsigned        reversebits(unsigned x)
{
    /* Reverse the bits of x (32 total). */
    x = ((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1);
    x = ((x & 0xCCCCCCCC) >> 2) | ((x & 0x33333333) << 2);
    x = ((x & 0xF0F0F0F0) >> 4) | ((x & 0x0F0F0F0F) << 4);
    x = ((x & 0xFF00FF00) >> 8) | ((x & 0x00FF00FF) << 8);
    x = (x >> 16) | (x << 16);
    return x;
}

#ifdef UNIT_TEST
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <limits.h>             /* for CHAR_BIT */

#define BITMASK(b) (1 << ((b) % CHAR_BIT))
#define BITSLOT(b) ((b) / CHAR_BIT)
#define BITTEST(a, b) ((a)[BITSLOT(b)] & BITMASK(b))

void            dumpbits(char *n)
{
    int             i;
    for (i = 0; i < sizeof(unsigned) * CHAR_BIT; i++)
        if (BITTEST(n, i))
            printf("1");
        else
            printf("0");
    putchar('\n');
}

int             main(void)
{
    unsigned        j;
    unsigned        i;
    unsigned        k;
    for (j = 0; j < 100; j++) {
        i = j;
        k = j;
        k = reversebits(k);
        dumpbits((char *) &i), dumpbits((char *) &k);
    }
    for (j = 0; j < 100; j++) {
        i = rand();
        k = i;
        k = reversebits(k);
        dumpbits((char *) &i), dumpbits((char *) &k);
    }
    i = UINT_MAX;
    k = i;
    k = reversebits(k);
    dumpbits((char *) &i), dumpbits((char *) &k);
    i = 0xAAAAAAAA;
    k = i;
    k = reversebits(k);
    dumpbits((char *) &i), dumpbits((char *) &k);
    i = 0xFEFEFEFE;
    k = i;
    k = reversebits(k);
    dumpbits((char *) &i), dumpbits((char *) &k);
    return 0;
}
#endif



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.