以 10 为基数的 bool 数组表示一个 binary/base 2 数

base ten number to array of bool that repricent a binary/base 2 number

我正在尝试在 C++ 中创建一个函数,它将接收一个书房号和 return 一个代表 binary/base 2 号的布尔数组 我需要该数组的长度为 16 项帮助将不胜感激。

您正在寻找 bitset:

#include <bitset>
#include <iostream>

int main() {
    std::bitset<16> bs = 16;
    std::cout << bs << '\n';
}

输出:

0000000000010000

可以直接使用std::bitset<n>,没有任何功能如下

#include <iostream>
#include <bitset>
int main(){
    constexpr size_t myInt = 2;
    constexpr std::bitset<16> binaryRepresentaion {myInt};
    std::cout << binaryRepresentaion;
}

出来的是

0000000000000010

Live

我从Berto99借来了constexpr。这是一个很好的观点。

除了bitset,您可以编写自己的算法:

constexpr std::array<bool, 16> toBoolArray(unsigned int n){
    auto arr = std::array<bool, 16>();
    for(auto i = 0; i < 16; i++){
        arr[i] = n%2;
        n/=2;
    }
    return arr;
}

另一种解决方案;我看到了你的问题,使用 bitset 得到的答案效果很好。但如果您不想使用预构建的比特流结构并且不想使用更“原始”的所需操作格式,我为您提出了一个不同的解决方案。我们有 theFunction,它执行所有必要的操作,将任何给定的整数转换为您寻找的数组格式的二进制表示形式。这是代码:

#include <iostream>
#include <cmath>


bool* theFunction(int);


int main() {
    
    bool *p;
    int denNum;

    std::cout << "Enter a den number!";
    std::cin >> denNum;

    p = theFunction(denNum);
    
    for (int i = 0; i < 16; i++ ){
        std::cout << *p ;
        p++;
    }
    
    return 0;
}



bool* theFunction(int number) {
    
    int maxPot=2;
    bool pivot;
    int i=0;
    static bool arr [16]; 
    
    
    //Number's conversion to binary
    while(number> 1){
        

        while(maxPot<number){
            maxPot=pow(maxPot,2);           
        }
        maxPot=maxPot/2;
        
        if( number>= maxPot){
            arr[i]=1;
            number = number - maxPot;       
            }
                                            
        else 
            arr[i]=0;
    
        i++;
    }
    
    
    //Loop to set 0 to leftover bits 
    if(i<16){
        for(i;i<16;i++)
            arr[i]=0;    
     }
     
    
     //Loop for reversing the array
     for(int b=0; b<8 ; b++){
        
        pivot=arr[b];
        
        arr[b]=arr[i];
        
        arr[i]=pivot;
        
        i=i-1;
     }

   return arr; 
}