Zakres zmiennych C++

0

Witam,
mam problem przy zamianie z systemu binarnego na system dziesiętny. Poniżej jest kod i po uruchomieniu otrzymuje liczbę 2147483647 - jest to maksymalny zakres dla zmiennej typu int - a ja mam w kodzie unsigned long long int, więc dlaczego pojawia się ta liczba zamiast 4294967297. Proszę o pomoc.

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

void bin_to_dec (string binarna)
{
    unsigned long long int dziesietna = strtol(binarna.c_str(), NULL, 2);
    cout << dziesietna << endl;
}

int main()
{
    string stringBinarna="10000000000000000000000000000001";
        bin_to_dec(stringBinarna);
    return 0;
}
1

Pewnie jesteś na windowsie, gdzie long jest 4-bajtowy. strtol zwraca long, użyj strtoll albo std::stoull

0

Próbowałem z funkcjami strtoll, std::stoull i strtoull i te same parametry tzn (binarna.c_str(), NULL, 2) ale wciąż otrzymuję zły wynik.

0
bartosz1986 napisał(a):

Witam,

Poniżej jest kod i po uruchomieniu otrzymuje liczbę 2147483647 - jest to maksymalny zakres dla zmiennej typu int - a ja mam w kodzie unsigned long long int, więc dlaczego pojawia się ta liczba zamiast 4294967297.

strtol konwertuje do long int czyli liczby ze znakiem, więc jeśli on zaokrągla do maksimum to to maksimum jest dla liczby ze znakiem. Potem robisz konwersję do unsigned long.
Użyj strtoul.

1 użytkowników online, w tym zalogowanych: 0, gości: 1