Computer >> Máy Tính >  >> Lập trình >> lập trình C

Làm thế nào để đếm các bit đã đặt trong một số dấu phẩy động trong C?

Trong bài toán này, một giá trị dấu phẩy động được đưa ra. Chúng ta phải tìm số bit đã đặt trong biểu diễn nhị phân của nó.

Ví dụ, nếu một số dấu phẩy động là 0,15625, thì có sáu bit được thiết lập. Một trình biên dịch C điển hình đã sử dụng biểu diễn dấu chấm động chính xác duy nhất. Vì vậy, nó sẽ giống như thế này.

Làm thế nào để đếm các bit đã đặt trong một số dấu phẩy động trong C?

Để chuyển đổi thành các giá trị bit của nó, chúng ta phải lấy số vào một biến con trỏ, sau đó nhập con trỏ thành dữ liệu kiểu char *. Sau đó xử lý từng byte một. Sau đó, chúng tôi có thể đếm các bit đã đặt của mỗi ký tự.

Ví dụ

#include <stdio.h>
int char_set_bit_count(char number) {
   unsigned int count = 0;
   while (number != 0) {
      number &= (number-1);
      count++;
   }
   return count;
}
int count_float_set_bit(float x) {
   unsigned int n = sizeof(float)/sizeof(char); //count number of characters in the binary equivalent
   int i;
   char *ptr = (char *)&x; //cast the address of variable into char
   int count = 0; // To store the result
   for (i = 0; i < n; i++) {
      count += char_set_bit_count(*ptr); //count bits for each bytes ptr++;
   }
   return count;
}
main() {
   float x = 0.15625;
   printf ("Binary representation of %f has %u set bits ", x, count_float_set_bit(x));
}

Đầu ra

Binary representation of 0.156250 has 6 set bits