число по основанию десять в массив bool, которое переписывает двоичное число / число с основанием 2 - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь создать функцию на C ++, которая будет принимать числовое значение и возвращать массив bool, представляющий двоичное / базовое 2-число. Мне нужно, чтобы массив состоял из 16 элементов, любая помощь приветствуется, спасибо.

Ответы [ 4 ]

1 голос
/ 21 июня 2020

Вы можете использовать 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

Я позаимствовал constexpr у Berto99. Хороший момент.

0 голосов
/ 21 июня 2020

Еще одно решение для вас; Я видел ваш вопрос, и с использованием битового набора ответы работают довольно хорошо. Но я придумал для вас другое решение, если вы не хотите использовать заранее созданную структуру битового потока и иметь более «сырой» формат необходимых операций. У нас есть функция, которая выполняет все необходимые операции для преобразования любого заданного целого числа в двоичное представление в формате массива по вашему запросу. Вот код:

#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; 
}
0 голосов
/ 21 июня 2020

За исключением 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;
}
0 голосов
/ 21 июня 2020

Вы ищете битовый набор :

#include <bitset>
#include <iostream>

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

Вывод:

0000000000010000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...