home *** CD-ROM | disk | FTP | other *** search
/ Acorn User 10 / AU_CD10.iso / Archived / Updates / Flash / writeflash / !MakeFlash / c / bitcount < prev    next >
Text File  |  2000-04-01  |  1KB  |  64 lines

  1. #include <stdio.h>
  2. //
  3. #include "proto.h"
  4. #include "bitcount.h"
  5.  
  6. static int bitcnts(S32 v);
  7. static int bitcnt(U32 v);
  8.  
  9.  
  10. int bitcount_signed(S32 v1, S32 v2, S32 v3, S32 v4) {
  11.  
  12.   int n, max;
  13.  
  14.   max = 0;
  15.   n = bitcnts(v1);   if (n > max)  max = n;
  16.   n = bitcnts(v2);   if (n > max)  max = n;
  17.   n = bitcnts(v3);   if (n > max)  max = n;
  18.   n = bitcnts(v4);   if (n > max)  max = n;
  19.   return max;
  20. }
  21.  
  22.  
  23. int bitcount(U32 v1, U32 v2, U32 v3, U32 v4) {
  24.  
  25.   int n, max;
  26.  
  27.   max = 0;
  28.   n = bitcnt(v1);   if (n > max)  max = n;
  29.   n = bitcnt(v2);   if (n > max)  max = n;
  30.   n = bitcnt(v3);   if (n > max)  max = n;
  31.   n = bitcnt(v4);   if (n > max)  max = n;
  32.   return max;
  33. }
  34.  
  35. // ----------------------------------------------------------------
  36.  
  37. int bitcnts(S32 v) {
  38.  
  39.   int n;
  40.  
  41.   n = 31;
  42.  
  43.   if (v >= 0) {
  44.     while (((v & (1<<n)) == 0) && (n > 0))  n--;
  45.     n += 2;
  46.  
  47.   } else {
  48.     while ((v & (1<<n)) && (n > 0))  n--;
  49.     n += 2;
  50.   }
  51.  
  52.   return n;
  53. }
  54.  
  55.  
  56. int bitcnt(U32 v) {
  57.  
  58.   int n;
  59.  
  60.   n = 31;
  61.   while (((v & (1<<n)) == 0) && (n > 0))  n--;
  62.   return n+1;
  63. }
  64.