以十为基数的数字到布尔数组,该数组要求二进制/基数为 2 的数字

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

本文关键字:数字 数组 二进制 布尔      更新时间:2023-10-16

我正在尝试在C++中创建一个函数,该函数将接收一个 den 数字并返回一个表示二进制/基数 2 的布尔数组,我需要数组长度为 16 个项目,任何帮助将不胜感激,谢谢。

您可以直接使用std::bitset<n>,无需任何功能,如下所示

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

出的是

0000000000000010

我从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;
}

您正在寻找一个位集:

#include<位集>#includeint main(( { std::bitset<16> bs = 16; std::cout <<bs <<''; }

输出:

0000000000010000

为您提供的另一种解决方案; 我看到了您的问题,并且通过使用位集,答案效果很好。但是,如果您不想使用预先构建的比特流结构并拥有所需操作的更"原始"格式,我为您提出了一个不同的解决方案。我们有 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; 
}