Warum nutzt du denn die Biginteger-Bibliotheken nicht einfach?
Wenn du eine einfache Vorstellung willst, wie diese Bibliotheken intern arbeiten: So wie in der Grundschule, mit schriftlicher Addition, Multiplikation, Division und so weiter*. Also Operationen basierend auf den Ziffern, bloß dass die Ziffern hier eben ganz Bytes oder gar ganze long ints sind, anstatt nur von 0 bis 9 zu gehen. Aber das ändert an der Mathematik nichts. Theoretisch könnte man sich auch auf Zeichenketten mit den Zeichen '0' bis '9' zur Speicherung beschränken, dann hätte man es wirklich so wie in der Grundschule. Aber das wäre unnötig ineffizient, da ein Zeichen im Computer 256 verschiedene Werte haben kann und man somit unnötig Platz und Rechenzeit+ verschenkt.
*: Dies ist natürlich eine Lüge, aber es gibt dir eine gute Vorstellung und ist auch gar nicht so weit von der Realität weg. In Wirklichkeit gibt es ein paar Tricks, die man nutzen kann, um effizienter als in der Grundschule zu sein. Viele dieser Tricks beruhen darauf, dass man eine Zahlenbasis hat, die eine Zweierpotenz ist, anstatt 10, wie in der Grundschule. Daher lernt man diese Tricks in der Grundschule nicht.
+: Dem Rechenwerk ist es egal, ob man sich auf '0' bis '9' beschränkt oder die vollen 256 Werte eines Bytes nutzt. Eine Addition von zwei Bytes dauert trotzdem gleich lange. Das ist auch der Grund, warum ich oben uint64_t als Basis vorgeschlagen habe statt char. Das Rechenwerk eines modernen Rechners kann nämlich mindestens 64-Bit gleichzeitig verrechnen. es würde sogar länger dauern, mit 8-Bit zu rechnen, da man die 64-Bit Werte, die aus dem Speicher kommen, erst passend zurecht stutzen müsste.