Annotation of 43BSDTahoe/usr.lib/learn/C/L41.1a, revision 1.1

1.1     ! root        1: #print
        !             2: The problem is to produce a function
        !             3:        bitct(x)
        !             4: which examines the bits in x, returning a count of
        !             5: the number of 1-bits.  There are various ways of doing
        !             6: this job: here are two.
        !             7: (1) a sane way.  Shift the word x right 16 times (you are
        !             8: on UNIX) and check the rightmost bit each time, counting
        !             9: the number of times it is '1'.
        !            10: (2) a machine-independent (sort of) way.  The logical
        !            11: bitwise AND of x and x-1 contains one fewer one bit than x itself.
        !            12: Loop anding x and x-1 until you get zero.
        !            13: Program either algorithm.  Compile and test it.  Leave it on
        !            14: a file bitct.c and type "ready".
        !            15: #once #create tzaqc.c
        !            16: main()
        !            17: {
        !            18:        int x;
        !            19:        x=23069;
        !            20:        if (bitct(x) != goodct(x)) 
        !            21:                return(1);
        !            22:        x=0;
        !            23:        if (bitct(x) != goodct(x)) 
        !            24:                return(1);
        !            25:        x=16384;
        !            26:        if (bitct(x) != goodct(x)) 
        !            27:                return(1);
        !            28:        x = -1;
        !            29:        if (bitct(x) != goodct(x)) 
        !            30:                return(1);
        !            31:        x= -200;
        !            32:        if (bitct(x) != goodct(x)) 
        !            33:                return(1);
        !            34:        return(0);
        !            35: }
        !            36: goodct(x)
        !            37: {
        !            38:        int k, i;
        !            39:        for(k=i=0; i<16; i++)
        !            40:                {
        !            41:                k =+ (x&1);
        !            42:                x= x>>1;
        !            43:                }
        !            44:        return(k);
        !            45: }
        !            46: #user
        !            47: cc tzaqc.c bitct.o
        !            48: a.out
        !            49: #succeed
        !            50: /*  a possible solution */
        !            51: bitct(x)
        !            52: {
        !            53:        int k, i;
        !            54: 
        !            55:        for(i=k=0; i<16; i++) {
        !            56:                if (x&1)
        !            57:                        k++;
        !            58:                x >>= 1;
        !            59:        }
        !            60:        return(k);
        !            61: }
        !            62: /* by the way, if you really care about
        !            63: this problem a table lookup by whole bytes
        !            64: is faster */
        !            65: #log
        !            66: #next
        !            67: 42.1a 10

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.