獲取某一個數的2進位制位數以及bitmask
阿新 • • 發佈:2021-12-10
舉例說明:比如32對應的2進製為2b'100000,對應的bitmask為2b'11111。
實現程式碼:
#include <stdio.h> typedef unsigned char uint8_t; typedef unsigned int uint32_t; /* 獲取某一個數有多少bit */ static uint8_t _soc_get_digital_bits(uint32_t num) { uint8_t count = 0; if (num % 2 == 0) num += 1; while(num != 0) { num /= 2; count++; } return count; } /* 獲取bit掩碼 */ static uint8_t _soc_get_digital_bitmask(uint32_t num) { uint8_t bits = 0; uint8_t bitmask = 1; uint8_t i = 0; bits = _soc_get_digital_bits(num); for (i = 0; i < bits; i++) bitmask *= 2; bitmask--; return bitmask; } int main() { uint32_t num = 0; uint8_t bits = 0; uint8_t bitmask = 0; for (num = 0; num < 33; num++) { bits = 0; bitmask = 0; bits = _soc_get_digital_bits(num); bitmask = _soc_get_digital_bitmask(num); printf("%u bits = %u, bitmask = 0x%x\n", num, bits, bitmask); } return 0; }
編譯、執行測試: