1. 程式人生 > 其它 >獲取某一個數的2進位制位數以及bitmask

獲取某一個數的2進位制位數以及bitmask

舉例說明:比如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;
}

編譯、執行測試: