2014-04-19 28 views
6

W języku C++ możliwe jest definiowanie liczb całkowitych o dowolnej długości?C++ dowolnej długości liczby całkowite

Zamiast więc używać uint64_t dla wszystkiego pomiędzy 33 a 64 bitami, mógłbym zdefiniować własne 34-bitowe, 36-bitowe itd., Liczby całkowite.

+0

+1. Ciekawy. Oczekiwanie na odpowiedź. –

+0

Jeśli znajdujesz się w zakresie zdefiniowanych liczb całkowitych architektury maszyny, możesz użyć ['std :: bitset <>'] (http://en.cppreference.com/w/cpp/utility/bitset), aby ograniczyć liczby do określona liczba bitów. –

Odpowiedz

1

Kompilator ma swoje własne typy, takie jak wspomniane. długi (32-bitowy na większości platform) i długi (64-bitowy na większości platform). Jeśli potrzebujesz wsparcia dla większych liczb całkowitych, możesz użyć różnych bibliotek, które ograniczają wielkość liczby całkowitej do wielkości twojej pamięci.

Biblioteki:

+0

To było niesprawiedliwe stwierdzenie, więc naprawiłem je: –

+0

Wyłącznie w interesie; czy funkcja Boost Multiprecision obsługuje wielkości całkowite nieujące się dwoma potęgami? – slugonamission

+0

@usonamission - Komputery są binarne. Jak mogą zrobić coś innego? –

1

Do obliczeń dałoby nie masz żadnej przewagi, ponieważ dzisiejsze procesory są zoptymalizowane pod kątem arytmetyki 32-bitowej lub 64-bitowej.

Zamiast tego, w przypadku problemów z wielkością, może być sens zdefiniowanie własnego pojemnika z liczbami n-bitowymi, co można łatwo zakodować.

Jeszcze bardziej ogólny może być pojemnik dla numerów modn (tj. Dla liczb od 0 do n-1, niekoniecznie dla modulo z dokładną mocą dwóch). W tym celu proste rozwiązanie (ale nie optymalne pod względem miejsca) może być oparte na największej sile n, która pasuje do 64-bitowej liczby całkowitej (np. Można spakować 22 liczby od 0 do 6 w jedną liczbę od 0 do 2 ** 64 -1).

+0

Twoja nazwa użytkownika pochodzi od Ciebie - czy była to 6502A lub 6502B? Jakaś cień RAM? BBC lub Acorn Electon? –

+0

@EdHeal: Apple] [:-) – 6502

+0

Nie wiedziałem, że Apple ma procesor 6502 –