2.6: Detalles - Códigos enteros
- Page ID
- 82271
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Hay muchas maneras de representar enteros como patrones de bits. Todos sufren de una incapacidad para representar arbitrariamente números enteros grandes en un número fijo de bits. Se dice que un cálculo que produce un resultado fuera de rango se desborda.
Las representaciones más utilizadas son código binario para enteros sin signo (por ejemplo, direcciones de memoria), complemento de 2 para enteros con signo (por ejemplo, aritmética ordinaria) y código gris binario para instrumentos que miden cantidades cambiantes.
La siguiente tabla da cinco ejemplos de códigos enteros de 4 bits. El MSB (bit más significativo) está a la izquierda y el LSB (bit menos significativo) a la derecha.
\(\overbrace{\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\quad}^{\text{Unsigned Integers}}\) | \(\overbrace{\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad}^{\text{Signed Integers}}\) | ||||
Código Binario | Código Gris Binario | Complemento de 2 | Signo/Magnitud | Complemento de 1 | |
\(\text{Range}\rightarrow\) | [0, 15] | [0, 15] | [-8, 7] | [-7, 7] | [-7, 7] |
-8 | 1000 | ||||
-7 | 1001 | 1111 | 1000 | ||
-6 | 1010 | 1110 | 1001 | ||
-5 | 1011 | 1101 | 1010 | ||
-4 | 1100 | 1100 | 1011 | ||
-3 | 1101 | 1011 | 1100 | ||
-2 | 1110 | 1010 | 1101 | ||
-1 | 1111 | 1001 | 1110 | ||
0 | 0000 | 0000 | 0000 | 0000 | 0000 |
1 | 0001 | 0001 | 0001 | 0001 | 0001 |
2 | 0010 | 0011 | 0010 | 0010 | 0010 |
3 | 0011 | 0010 | 0011 | 0011 | 0011 |
4 | 0100 | 0110 | 0100 | 0100 | 0100 |
5 | 0101 | 0111 | 0101 | 0101 | 0101 |
6 | 0110 | 0101 | 0110 | 0110 | 0110 |
7 | 0111 | 0100 | 0111 | 0111 | 0111 |
8 | 1000 | 1100 | |||
9 | 1001 | 1101 | |||
10 | 1010 | 1111 | |||
11 | 1011 | 1110 | |||
12 | 1100 | 1010 | |||
13 | 1101 | 1011 | |||
14 | 1110 | 1001 | |||
15 | 1111 | 1000 |
Código Binario
Este código es para enteros no negativos. Para el código de longitud\(n\), los 2\(^n\) patrones representan enteros de 0 a 2\(^n\) − 1. El LSB (bit menos significativo) es 0 para pares y 1 para enteros impares.
Código Gris Binario
Este código es para enteros no negativos. Para el código de longitud\(n\), los 2\(^n\) patrones representan enteros de 0 a 2\(^n\) −1. Los dos patrones de bits de enteros adyacentes difieren exactamente en un bit. Esta propiedad hace que el código sea útil para sensores donde el entero que se está codificando podría cambiar mientras una medición está en progreso. El siguiente homenaje anónimo apareció en la columna de Martin Gardner “Mathematical Games” en Scientific American, agosto de 1972, pero en realidad se conocía mucho antes.
El código gris binario es divertido, f
o con ello se pueden hacer COSAS EXTRAÑAS...
Quince, como saben, es uno oh oh oh,
mientras que diez es uno uno uno uno uno.
Complemento de 2
Este código es para enteros, tanto positivos como negativos. Para un código de longitud\(n\), los 2\(^n\) patrones representan números enteros −2\(^{n−1}\) a 2\(^{n−1}\) −1. El LSB (bit menos significativo) es 0 para pares y 1 para enteros impares. Donde se superponen, este código es lo mismo que el código binario. Este código es ampliamente utilizado.
Signo/Magnitud
Este código es para enteros, tanto positivos como negativos. Para el código de longitud\(n\), los 2\(^n\) patrones representan enteros − (2\(^{n−1}\) − 1) a 2\(^{n−1}\) − 1. El MSB (bit más significativo) es 0 para números enteros positivos y 1 para números enteros negativos; los otros bits llevan la magnitud. Donde se superponen, este código es lo mismo que el código binario. Si bien conceptualmente simple, este código es incómodo en la práctica. Sus representaciones separadas para +0 y -0 no son generalmente útiles.
Complemento de 1
Este código es para enteros, tanto positivos como negativos. Para el código de longitud\(n\), los 2\(^n\) patrones representan enteros − (2\(^{n−1}\) − 1) a 2\(^{n−1}\) − 1. El MSB es 0 para los enteros positivos; los enteros negativos se forman complementando cada bit del entero positivo correspondiente. Donde se superponen, este código es lo mismo que el código binario. Este código es incómodo y rara vez se usa hoy en día. Sus representaciones separadas para +0 y -0 no son generalmente útiles.