blob: c6a5be64376d236e60f612fcbfa09cd1d9ec27f4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/*
############################################################################
#
# File: bitcount.c
#
# Subject: Function to count bits in an integer
#
# Author: Gregg M. Townsend
#
# Date: April 9, 1996
#
############################################################################
#
# This file is in the public domain.
#
############################################################################
#
# bitcount(i) returns the number of bits that are set in the integer i.
# It works only for "normal" integers, not large integers.
#
############################################################################
#
# Requires: Dynamic loading
#
############################################################################
*/
#include "icall.h"
int bitcount(int argc, descriptor *argv) /*: count bits in an integer */
{
unsigned long v;
int n;
ArgInteger(1); /* validate type */
v = IntegerVal(argv[1]); /* get value as unsigned long */
n = 0;
while (v != 0) { /* while more bits to count */
n += v & 1; /* check low-order bit */
v >>= 1; /* shift off with zero-fill */
}
RetInteger(n); /* return result */
}
|