適当書いたビットリバース
ビットリバース。
#include<stdio.h> typedef unsigned int uint; void printbits(uint n, int bitlen) { int i; for (i = 0; i < bitlen; i++) printf("%d", (n >> (bitlen-i-1)) & 1); } uint bitreverse(uint n, int bitlen) { uint r = 0; int i; for (i = 0; i < bitlen; i++, n>>=1) r = r << 1 | n & 1; return r; } int main(int argc, char** argv) { uint n = atoi(argv[1]); int bitlen = atoi(argv[2]); //printbits(n, bitlen); printf("\n"); n = bitreverse(n, bitlen); printbits(n, bitlen); printf(" %d", n); printf("\n"); }
実行
$ for i in $(seq 0 15); do ./a.out $i 4; done 0000 0 1000 8 0100 4 1100 12 0010 2 1010 10 0110 6 1110 14 0001 1 1001 9 0101 5 1101 13 0011 3 1011 11 0111 7 1111 15