以 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
我从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;
}
我正在尝试在 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
我从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;
}