HasanRasulov

count_multiplication_set_bits.c

Mar 7th, 2021 (edited)
219
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <string.h>
  4.  
  5. #define SIZE(x) (sizeof(x) * 8)
  6.  
  7. void int_to_binary(int num,uint8_t bin[],size_t n){
  8.  
  9.     size_t i=n-1;
  10.     while(num){
  11.  
  12.         bin[i--]=num & 0x1;
  13.         num>>=1;  
  14.  
  15.     }
  16.  
  17. }
  18.  
  19. void print(uint8_t* bin,size_t n){
  20.  
  21.     for(size_t i=0;i<n;i++){
  22.         printf("%d",bin[i]);
  23.         if(i%4==0) printf(" ");
  24.     }
  25.     printf("\n");
  26.  
  27. }
  28.  
  29. size_t count_set_bits(int A,int B){
  30.  
  31.     size_t size = SIZE(int),s = size;
  32.  
  33.     uint8_t bin_A[size];
  34.     uint8_t bin_B[size];
  35.     memset(bin_A,0,size);
  36.     memset(bin_B,0,size);
  37.  
  38.     int_to_binary(A,bin_A,size);        
  39.     int_to_binary(B,bin_B,size);
  40.  
  41.     uint8_t carry=0,count=0,sum=0;        
  42.     print(bin_A,size);  
  43.     print(bin_B,size);  
  44.  
  45.  
  46.     for(size_t bit=0;bit<=size;bit++){
  47.         s--;
  48.         sum = 0;
  49.         for(size_t i=s,j=size-1;i<=size-1&&j>=s;i++,j--)
  50.  
  51.             sum+=bin_A[i]*bin_B[j];
  52.  
  53.         sum+=carry;
  54.         count+=sum%2;
  55.                 printf("%d",sum%2);
  56.         carry=(uint8_t)(sum/2);
  57.  
  58.  
  59.     }
  60.  
  61.     s = size;
  62.     for(size_t bit=0;bit<size;bit++){
  63.         s--;
  64.         sum=0;
  65.         for(size_t i=0,j=s-1;i<s && j>=0;i++,j--)
  66.             sum+=bin_A[i]*bin_B[j];
  67.  
  68.  
  69.         sum+=carry;
  70.         count+=sum%2;
  71.  
  72.                 printf("%d",sum%2);
  73.         carry=(uint8_t)(sum/2);
  74.     }
  75.  
  76.     return count;
  77. }
  78.  
  79. int main(){
  80.  
  81.  
  82.  
  83.     printf("%zu",count_set_bits(43749823,1232131));
  84.  
  85.  
  86.  
  87.  
  88.  
  89. }
Add Comment
Please, Sign In to add comment