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.
Để 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