Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.1 6/24/83; site unisoft.UUCP Path: utzoo!watmath!clyde!cbosgd!ihnp4!zehntel!zinfandel!dual!unisoft!eryk From: eryk@unisoft.UUCP (Eryk Vershen) Newsgroups: net.lang.c Subject: Re: reversing a mask Message-ID: <364@unisoft.UUCP> Date: Thu, 29-Nov-84 01:32:56 EST Article-I.D.: unisoft.364 Posted: Thu Nov 29 01:32:56 1984 Date-Received: Fri, 30-Nov-84 08:13:02 EST References: <1@imd.UUCP> <469@ncoast.UUCP> <691@gloria.UUCP>, <242@desint.UUCP> Organization: UniSoft Corp., Berkeley Lines: 42 Apropos of nothing here is a cute way to reverse bits due to C. Strachey. int mask[] = { 0x55555555, 0x33333333, 0x0F0F0F0F, 0x00FF00FF, 0x0000FFFF } long bitrev(val) long val; { register long i; register int j ,k; i = val; j = 16; k = 4; while (j) { i = ((i & mask[k]) << j) | ((i >> j) & mask[k]); j >>= 1; k--; } return(i); } /* * Proof of the above (by example). * * j=16 i=abcdefghijklmnopqrstuvwxyz012345 * 8 qrstuvwxyz012345abcdefghijklmnop * 4 yz012345qrstuvwxijklmnopabcdefgh * 2 2345yz01uvwxqrstmnopijklefghabcd * 1 452301yzwxuvstqropmnklijghefcdab * 0 543210zyxwvutsrqponmlkjihgfedcba */ -- - eryk vershen ucbvax!unisoft!eryk "overcoming computer literacy"