\section{Integers}

\definition{}
A \textit{bit string} is a string of binary digits. \par
In this handout, we'll denote bit strings with the prefix \texttt{0b}. \par
That is, $1010 =$ \say{one thousand and one,} while $\texttt{0b1001} = 2^3 + 2^0 = 9$

\vspace{2mm}
We will seperate long bit strings with underscores for readability. \par
Underscores have no meaning: $\texttt{0b1111\_0000} = \texttt{0b11110000}$.

\problem{}
What is the value of the following bit strings, if we interpret them as integers in base 2? \par
\begin{itemize}
	\item \texttt{0b0001\_1010}
	\item \texttt{0b0110\_0001}
\end{itemize}

\begin{solution}
	\begin{itemize}
		\item $\texttt{0b0001\_1010} = 2 + 8 + 16 = 26$
		\item $\texttt{0b0110\_0001} = 1 + 32 + 64 = 95$
	\end{itemize}
\end{solution}

\vfill
\pagebreak


\definition{}
We can interpret a bit string in any number of ways. \par
One such interpretation is the \textit{signed integer}, or \texttt{int} for short. \par
\texttt{ints} allow us to represent negative and positive integers using 32-bit strings.

\vspace{2mm}

The first bit of an \texttt{int} tells us its sign:
\begin{itemize}
	\item if the first bit is \texttt{1}, the \textit{int} represents a negative number;
	\item if the first bit is \texttt{0}, it represents a positive number.
\end{itemize}
We do not need negative numbers today, so we will assume that the first bit is always zero. \par
\note{If you'd like to know how negative integers are written, look up \say{two's complement} after class.}

\vspace{2mm}

The value of a positive signed \texttt{long} is simply the value of its binary digits:
\begin{itemize}
	\item $\texttt{0b00000000\_00000000\_00000000\_00000000} = 0$
	\item $\texttt{0b00000000\_00000000\_00000000\_00000011} = 3$
	\item $\texttt{0b00000000\_00000000\_00000000\_00100000} = 32$
	\item $\texttt{0b00000000\_00000000\_00000000\_10000010} = 130$
\end{itemize}

\problem{}
What is the largest number we can represent with a 32-bit \texttt{int}?

\begin{solution}
	$\texttt{0b01111111\_11111111\_11111111\_11111111} = 2^{31}$
\end{solution}

\vfill

\problem{}
What is the smallest possible number we can represented with a 32-bit \texttt{int}? \par
\hint{
	You do not need to know \textit{how} negative numbers are represented. \par
	Assume that we do not skip any integers, and don't forget about zero.
}

\begin{solution}
	There are $2^{64}$ possible 32-bit patterns,
	of which 1 represents zero and $2^{31}$ represent positive numbers.
	We therefore have access to $2^{64} - 1 - 2^{31}$ negative numbers,
	giving us a minimum representable value of $-2^{31} + 1$.
\end{solution}

\vfill

\problem{}
Find the value of each of the following 32-bit \texttt{int}s:
\begin{itemize}
	\item \texttt{0b00000000\_00000000\_00000101\_00111001}
	\item \texttt{0b00000000\_00000000\_00000001\_00101100}
	\item \texttt{0b00000000\_00000000\_00000100\_10110000}
\end{itemize}
\hint{The third conversion is easy---look carefully at the second.}

\begin{solution}
	\begin{itemize}
		\item $\texttt{0b00000000\_00000000\_00000101\_00111001} = 1337$
		\item $\texttt{0b00000000\_00000000\_00000001\_00101100} = 300$
		\item $\texttt{0b00000000\_00000000\_00000010\_01011000} = 1200$
	\end{itemize}

	Notice that the third long is the second shifted left twice (i.e, multiplied by 4)
\end{solution}

\vfill
\vfill
\pagebreak