Convert bool array to int32 ,unsigned int and double?

后端 未结 3 1451
甜味超标
甜味超标 2021-01-17 00:14

I\'ve bool arrays of sizes : 32, 48, 64 (each boolean represents a bit). how can I convert them to a number with a good performance( int, unsigned int, double48, double64)?

3条回答
  •  盖世英雄少女心
    2021-01-17 00:54

    template 
    T make_number (bool ar[], size_t ar_size) {
        T ret {};
    
        for (size_t i = 0; i < ar_size; ++i) {
            T s {ar[i]};
            s <<= i;
            ret |= s;
        }
    
        return ret;
    }
    
    
    int main (int, char**) {
    
    
        bool ar1[] = {1, 1, 1, 1, 0, 1};
        bool ar2[] = {1, 1, 1, 1, 1, 1, 1, 1};
        bool ar3[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0};
        bool ar4[] = {1, 1, 1, 1, 1, 1, 1, 1,
                      1, 1, 1, 1, 1, 1, 1, 1,
                      1, 1, 1, 1, 1, 1, 1, 1,
                      1, 1, 1, 1, 1, 1, 1, 1,
                      1, 1, 1, 1, 1, 1, 1, 1,
                      1, 1, 1, 1, 1, 1, 1, 1,
                      1, 1, 1, 1, 1, 1, 1, 1,
                      1, 1, 1, 1, 1, 1, 1, 1};
    
        cout << static_cast (make_number (ar1, 6)) << endl;
        cout << static_cast (make_number (ar2, 8)) << endl;
        cout << make_number (ar3, 16) << endl;
        cout << make_number (ar4, 64) << endl;
    
        return 0;
    }
    

    And the output:

    47
    255
    32767
    18446744073709551615
    

提交回复
热议问题