+Addition $s = a + b$ is done by adding digits from least to most significant.
+\begin{align*}
+ s = \displaystyle\sum_{i=0}^{\infty} (a_i + b_i) \beta^{i}
+\end{align*}
+
+Considering the contributions to the sum of the $i^\text{th}$ and $(i+1)^\text{th}$ digits:
+\begin{align}
+ s_i\beta^i + s_{i+1}\beta^{i+1} &= (a_i+b_i)\beta^i + (a_i+b_i)\beta^{i+1} \\
+ \implies s_i + s_{i+1}\beta &= (a_i+b_i) + (a_{i+1}+b_{i+1})\beta \\
+\end{align}
+
+If the sum $a_i + b_i \geq \beta$, ie: It cannot be represented in base $\beta$, then we can rewrite this as:
+\begin{align}
+ s_i + s_{i+1}\beta &= \beta + (a_i+b_i-\beta) + (a_{i+1}+b_{i+1})\beta \\
+ &= (a_i+b_i-\beta) + (a_{i+1}+b_{i+1}+1)\beta
+\end{align}
+
+So we can use the digits $s_i = (a_i+b_i-\beta) < \beta$ and $s_{i+1} = (a_{i+1}+b_{i+1}+1)$.
+This operation is the \emph{carry}\footnote{I'm pretty sure that is not a rigorous definition but close enough}.
+
+The x64 instruction set includes an \emph{add with carry} instruction \verb/adc/ which will add fixed sized digits and set a flag to indicate a carry. This allows for easy adding of an array of digits representing an arbitrary sized integer.
+
+