---
title: "Número mágico (programación)"
type: "antipattern"
slug: "magic-number"
url: "http://localhost:3000/es/antipatterns/magic-number.md"
description: "Valor numérico con un significado poco claro"
---
# Número mágico (programación)

> Valor numérico con un significado poco claro

En [programación de computadoras](https://en.wikipedia.org/wiki/Computer%5Fprogramming "Computer programming"), un **número mágico** o **firma de archivo** es un [literal](https://en.wikipedia.org/wiki/Literal%5F%28computer%5Fprogramming%29 "Literal (computer programming)") [numérico](https://en.wikipedia.org/wiki/Numeric "Numeric") presente en el [código fuente](https://en.wikipedia.org/wiki/Source%5Fcode "Source code") que tiene un significado especial y particular que resulta poco claro para el lector. También en [informática](https://en.wikipedia.org/wiki/Computing "Computing"), aunque no únicamente en la programación, el término se utiliza para un número que identifica un concepto concreto pero cuyo significado resulta poco claro sin conocimiento adicional. Por ejemplo, algunos [formatos de archivo](https://en.wikipedia.org/wiki/File%5Fformat "File format") se identifican mediante un número mágico incrustado en el [archivo](https://en.wikipedia.org/wiki/Computer%5Ffile "Computer file") ). Además, un número asociado de forma relativamente única a un concepto particular, como un [identificador único universal](https://en.wikipedia.org/wiki/Universally%5Funique%5Fidentifier "Universally unique identifier"), podría clasificarse como un número mágico.

## Literal numérico

Un **número mágico** o **constante mágica** es un [literal](https://en.wikipedia.org/wiki/Literal%5F%28computer%5Fprogramming%29 "Literal (computer programming)") numérico presente en el código fuente que tiene un significado especial que resulta poco claro en su contexto. Esto se considera un [antipatrón](https://en.wikipedia.org/wiki/Anti-pattern "Anti-pattern") e infringe una de las reglas más antiguas de la programación, que se remonta a los manuales de [COBOL](https://en.wikipedia.org/wiki/COBOL "COBOL"), [FORTRAN](https://en.wikipedia.org/wiki/FORTRAN "FORTRAN") y [PL/1](https://en.wikipedia.org/wiki/PL/1 "PL/1") de la década de 1960\.

Por ejemplo, en el siguiente código que calcula un precio después de impuestos, `1.05` es un número mágico, ya que el valor codifica la tasa del impuesto sobre las ventas, el 5%, de una forma poco evidente.

price_after_tax = 1.05 * price

El uso de números mágicos en el código oculta la intención de los desarrolladores al elegir ese número, aumenta las posibilidades de cometer errores sutiles y dificulta que el programa pueda adaptarse y ampliarse en el futuro. Por ejemplo, resulta difícil saber si todos los dígitos de `3.14159265358979323846` están escritos correctamente, o si esta constante de [pi](https://en.wikipedia.org/wiki/Pi "Pi") puede [truncarse](https://en.wikipedia.org/wiki/Truncation "Truncation") a `3.14159` sin que su menor precisión afecte a la funcionalidad del programa. Sustituir todos los números mágicos significativos por [constantes](https://en.wikipedia.org/wiki/Constant%5F%28programming%29 "Constant (programming)") con nombre (también llamadas variables explicativas) hace que los programas sean más fáciles de leer, comprender y mantener.

El ejemplo anterior puede mejorarse añadiendo una variable con un nombre descriptivo:

TAX = 0.05
price_after_tax = (1.0 + TAX) * price

Un buen nombre puede dar lugar a un código que resulte más fácil de entender para quien lo mantiene y no es el autor original, e incluso para el propio autor original al cabo de un tiempo. Un ejemplo de una constante con un nombre poco informativo es `int SIXTEEN = 16`, mientras que `int NUMBER_OF_BITS = 16` podría resultar más útil.

Los datos no numéricos pueden tener las mismas propiedades mágicas y, por tanto, los mismos problemas que los números mágicos. Así pues, declarar `const string testUserName = "John"` y utilizar `testUserName` podría ser mejor que emplear directamente el literal `"John"`.

### Ejemplo

Por ejemplo, si se necesita barajar aleatoriamente los valores de un arreglo que representa una baraja estándar de [naipes](https://en.wikipedia.org/wiki/Playing%5Fcards "Playing cards"), este [pseudocódigo](https://en.wikipedia.org/wiki/Pseudocode "Pseudocode") realiza la tarea utilizando el algoritmo de [barajado de Fisher–Yates](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates%5Fshuffle "Fisher–Yates shuffle"):

**for** i **from** 1 **to** 52
    j := i + randomInt(53 - i) - 1
    a.swapEntries(i, j)

donde `a` es un objeto de tipo arreglo, la función `randomInt(x)` elige un entero aleatorio entre 1 y _x_, ambos incluidos, y `swapEntries(i, j)` intercambia las entradas _i_\-ésima y _j_\-ésima del arreglo. En el ejemplo anterior, `52` y `53` son números mágicos que, además, no guardan una relación clara entre sí. Se considera un mejor estilo de programación escribir lo siguiente:

_int_ deckSize:= 52
**for** i **from** 1 **to** deckSize
    j := i + randomInt(deckSize + 1 - i) - 1
    a.swapEntries(i, j)

Esto es preferible por varias razones:

* **Mayor legibilidad**. Un programador que lea el primer ejemplo podría preguntarse: _¿Qué significa aquí el número 52? ¿Por qué 52?_ El programador podría deducir el significado tras leer el código con atención, pero no resulta evidente. Los números mágicos resultan especialmente confusos cuando el mismo número se usa con distintos fines en una misma sección de código.
* **Más fácil de mantener**. Resulta más sencillo modificar el valor del número, ya que no está duplicado. Cambiar el valor de un número mágico es propenso a errores, porque el mismo valor suele utilizarse varias veces en distintos lugares de un programa. Además, cuando dos variables o números semánticamente distintos tienen el mismo valor, podrían editarse ambos por accidente al mismo tiempo. Para modificar el primer ejemplo y barajar una baraja del [Tarot](https://en.wikipedia.org/wiki/Tarot "Tarot"), que tiene 78 cartas, un programador podría, de forma ingenua, sustituir cada aparición de 52 en el programa por 78\. Esto provocaría dos problemas. En primer lugar, pasaría por alto el valor 53 de la segunda línea del ejemplo, lo que haría que el algoritmo fallara de forma sutil. En segundo lugar, probablemente reemplazaría los caracteres «52» en todas partes, con independencia de si se refieren al tamaño de la baraja o a algo completamente distinto, como el número de semanas de un año del calendario gregoriano o, de forma más insidiosa, si forman parte de un número como «1523», todo lo cual introduciría errores. En cambio, cambiar el valor de la variable `deckSize` en el segundo ejemplo sería una modificación sencilla de una sola línea.
* **Fomenta la documentación**. El único lugar donde se declara la variable con nombre constituye un buen sitio para documentar qué significa el valor y por qué tiene el valor que tiene. Tener el mismo valor en multitud de lugares conduce a comentarios duplicados (con los consiguientes problemas al actualizar algunos y olvidar otros) o no deja ningún _único_ lugar en el que resulte natural que el autor explique el valor y donde sea probable que el lector busque una explicación.
* **Agrupa la información**. Las declaraciones de las variables de «número mágico» pueden colocarse juntas, normalmente al principio de una función o de un archivo, lo que facilita su revisión y modificación.
* **Detecta [erratas](https://en.wikipedia.org/wiki/Typo "Typo")**. Usar una variable (en lugar de un literal) aprovecha la comprobación del compilador. Escribir accidentalmente «62» en vez de «52» pasaría inadvertido, mientras que escribir «`dekSize`» en lugar de «`deckSize`» haría que el compilador advirtiera de que `dekSize` no está declarada.
* **Reduce la escritura**. Si un [IDE](https://en.wikipedia.org/wiki/Integrated%5Fdevelopment%5Fenvironment "Integrated development environment") admite el [autocompletado de código](https://en.wikipedia.org/wiki/Code%5Fcompletion "Code completion"), rellenará la mayor parte del nombre de la variable a partir de las primeras letras.
* **Facilita la parametrización**. Por ejemplo, para generalizar el ejemplo anterior en un procedimiento que baraje una baraja con cualquier número de cartas, bastaría con convertir `deckSize` en un parámetro de dicho procedimiento, mientras que el primer ejemplo requeriría varios cambios.

**function** shuffle (**int** deckSize)
   **for** i **from** 1 **to** deckSize
       j := i + randomInt(deckSize + 1 - i) - 1
       a.swapEntries(i, j)

Las desventajas son:

* **Rompe la localidad**. Cuando la constante con nombre no se define cerca de donde se usa, se perjudica la localidad y, por tanto, la comprensibilidad del código. Colocar el 52 en un lugar posiblemente lejano implica que, para entender por completo el funcionamiento del bucle «for» (por ejemplo, para estimar el tiempo de ejecución del bucle), hay que localizar la definición y comprobar que es el número esperado. Esto es fácil de evitar (reubicando la declaración) cuando la constante solo se usa en una parte del código. Cuando la constante con nombre se utiliza en partes dispares, en cambio, la ubicación remota es una pista para el lector de que el mismo valor aparece en otros lugares del código, que también podría merecer la pena revisar.
* **Provoca verbosidad**. La declaración de la constante añade una línea. Cuando el nombre de la constante es más largo que el valor, en especial si varias de esas constantes aparecen en una misma línea, puede que sea necesario dividir una sentencia lógica del código en varias líneas. Un aumento de la verbosidad puede estar justificado cuando existe cierta probabilidad de confusión respecto a la constante, o cuando es probable que la constante deba cambiarse, como en la [reutilización](https://en.wikipedia.org/wiki/Code%5Freuse "Code reuse") de una rutina de barajado para otros juegos de cartas. Igualmente puede justificarse como un aumento de la expresividad.
* **Consideraciones de rendimiento**. Procesar la expresión `deckSize + 1` en tiempo de ejecución puede ser más lento que el valor «53». Dicho esto, la mayoría de los compiladores modernos utilizan técnicas como el [plegado de constantes](https://en.wikipedia.org/wiki/Constant%5Ffolding "Constant folding") y la [optimización de bucles](https://en.wikipedia.org/wiki/Loop%5Foptimization "Loop optimization") para resolver la suma durante la compilación, por lo que normalmente no hay penalización de velocidad, o es insignificante, en comparación con el uso de números mágicos en el código. Sobre todo, el coste de la depuración y el tiempo necesario para intentar comprender un código no explicativo deben sopesarse frente al ínfimo coste del cálculo.

### Uso aceptado

Cuando un literal numérico carece de un significado especial, su uso no se clasifica como mágico, aunque lo que se considera «especial» es subjetivo. Entre los ejemplos de literales que a menudo no se consideran mágicos se incluyen:

* Uso de 0 y 1 como valores iniciales o de incremento en un [bucle for](https://en.wikipedia.org/wiki/For%5Floop "For loop"), como `for (int i = 0; i < max; i += 1)`
* Uso del 2 para comprobar si un número es par o impar, como en `isEven = (x % 2 == 0)`, donde `%` es el operador [módulo](https://en.wikipedia.org/wiki/Modulo "Modulo")
* Uso de literales sencillos, p. ej., en expresiones como `circumference = 2 * Math.PI * radius`, o para calcular el [discriminante](https://en.wikipedia.org/wiki/Discriminant "Discriminant") de una [ecuación cuadrática](https://en.wikipedia.org/wiki/Quadratic%5Fequation "Quadratic equation") como `d = b^2 − 4*a*c`
* Uso de potencias de 10 para convertir valores métricos (por ejemplo, entre gramos y kilogramos) o para calcular valores porcentuales y [por mil](https://en.wikipedia.org/wiki/Per%5Fmille "Per mille")
* Exponentes en expresiones como `(f(x) ** 2 + f(y) ** 2) ** 0.5` para f ( x ) 2 + f ( y ) 2 {\\displaystyle {\\sqrt {f(x)^{2}+f(y)^{2}}}}
* Los literales 1 y 0 se utilizan a veces para representar los valores [booleanos](https://en.wikipedia.org/wiki/Boolean%5Fdata%5Ftype "Boolean data type") verdadero y falso. Es discutible, pero asignar estos valores a nombres como TRUE y FALSE podría ser mejor.
* En C y C++, a menudo se usa 0 para significar [puntero nulo](https://en.wikipedia.org/wiki/Null%5Fpointer "Null pointer"), aunque la biblioteca estándar de C define una macro `NULL` y el C++ moderno incluye una palabra clave `nullptr`.

## Indicador de formato

### Origen

Los indicadores de formato se usaron por primera vez en el primer código fuente de [Version 7 Unix](https://en.wikipedia.org/wiki/Version%5F7%5FUnix "Version 7 Unix").

[Unix](https://en.wikipedia.org/wiki/Unix "Unix") se portó a uno de los primeros [PDP-11](https://en.wikipedia.org/wiki/PDP-11 "PDP-11")/20 de [DEC](https://en.wikipedia.org/wiki/Digital%5FEquipment%5FCorporation "Digital Equipment Corporation"), que no disponía de [protección de memoria](https://en.wikipedia.org/wiki/Memory%5Fprotection "Memory protection"). Por ello, las primeras versiones de Unix usaban el modelo de [referencia de memoria reubicable](https://en.wikipedia.org/wiki/Position-independent%5Fcode "Position-independent code"). Las versiones anteriores a [Sixth Edition Unix](https://en.wikipedia.org/wiki/Sixth%5FEdition%5FUnix "Sixth Edition Unix") leían un archivo ejecutable en la [memoria](https://en.wikipedia.org/wiki/Magnetic-core%5Fmemory "Magnetic-core memory") y saltaban a la primera dirección de memoria baja del programa, la [dirección relativa](https://en.wikipedia.org/wiki/Relative%5Faddress "Relative address") cero. Con el desarrollo de las versiones [paginadas](https://en.wikipedia.org/wiki/Memory%5Fpage "Memory page") de Unix, se creó una [cabecera](https://en.wikipedia.org/wiki/Header%5F%28computing%29 "Header (computing)") para describir los componentes de la [imagen ejecutable](https://en.wikipedia.org/wiki/Executable "Executable"). Además, se insertó una [instrucción de salto](https://en.wikipedia.org/wiki/Branch%5Finstruction "Branch instruction") como primera palabra de la cabecera para omitir la cabecera e iniciar el programa. De este modo, un programa podía ejecutarse en el antiguo modo de referencia de memoria reubicable (normal) o en modo paginado. A medida que se desarrollaban más formatos ejecutables, se añadían nuevas constantes incrementando el [desplazamiento](https://en.wikipedia.org/wiki/Offset%5F%28computer%5Fscience%29 "Offset (computer science)") del salto.

En el [código fuente](https://en.wikipedia.org/wiki/Lions%27%5FCommentary%5Fon%5FUNIX%5F6th%5FEdition,%5Fwith%5FSource%5FCode "Lions' Commentary on UNIX 6th Edition, with Source Code") de la [Sixth Edition](https://en.wikipedia.org/wiki/Version%5F6%5FUnix "Version 6 Unix") del cargador de programas de Unix, la función exec() leía la imagen ejecutable ([binaria](https://en.wikipedia.org/wiki/Binary%5Fnumeral%5Fsystem "Binary numeral system")) del sistema de archivos. Los primeros 8 [bytes](https://en.wikipedia.org/wiki/Byte "Byte") del archivo formaban una [cabecera](https://en.wikipedia.org/wiki/Header%5F%28computing%29 "Header (computing)") que contenía los tamaños del programa (texto) y de las áreas de datos inicializados (globales). Además, la primera palabra de 16 bits de la cabecera se comparaba con dos [constantes](https://en.wikipedia.org/wiki/Constant%5F%28programming%29 "Constant (programming)") para determinar si la [imagen ejecutable](https://en.wikipedia.org/wiki/Executable "Executable") contenía [referencias de memoria reubicables](https://en.wikipedia.org/wiki/Position-independent%5Fcode "Position-independent code") (normal), la imagen ejecutable de solo lectura [paginada](https://en.wikipedia.org/wiki/Memory%5Fpage "Memory page") recién implementada, o la imagen paginada con instrucciones y datos separados. No se mencionaba el doble papel de la constante de la cabecera, pero el byte de orden superior de la constante era, de hecho, el [código de operación](https://en.wikipedia.org/wiki/Operation%5Fcode "Operation code") de la instrucción de salto del PDP-11 (000407 en [octal](https://en.wikipedia.org/wiki/Octal "Octal") o 0107 en [hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal "Hexadecimal")). Sumar siete al contador de programa mostraba que, si esta constante se ejecutaba, haría que el servicio exec() de Unix saltara por encima de la cabecera de ocho bytes de la imagen ejecutable e iniciara el programa.

Dado que la Sixth y la Seventh Edition de Unix empleaban código de paginación, el doble papel de la constante de la cabecera quedaba oculto. Es decir, el servicio exec() leía los datos ([meta](https://en.wikipedia.org/wiki/Meta%5F%28prefix%29 "Meta (prefix)")) de la cabecera del archivo ejecutable en un búfer del [espacio de núcleo](https://en.wikipedia.org/wiki/Kernel%5Fspace "Kernel space"), pero leía la imagen ejecutable en el [espacio de usuario](https://en.wikipedia.org/wiki/User%5Fspace "User space"), por lo que no usaba la función de salto de la constante. La creación de números mágicos se implementó en el [enlazador](https://en.wikipedia.org/wiki/Linker%5F%28computing%29 "Linker (computing)") y el [cargador](https://en.wikipedia.org/wiki/Loader%5F%28computing%29 "Loader (computing)") de Unix, y el salto mediante el número mágico probablemente seguía utilizándose en el conjunto de [programas de diagnóstico](https://en.wikipedia.org/wiki/Diagnostic%5Fprogram "Diagnostic program") [autónomos](https://en.wikipedia.org/wiki/Standalone%5Fprogram "Standalone program") que acompañaban a la Sixth y la Seventh Edition. Así pues, la constante de la cabecera sí ofrecía una ilusión y cumplía los criterios para ser considerada [mágica](https://en.wikipedia.org/wiki/Magic%5F%28programming%29 "Magic (programming)").

En Version Seven Unix, la constante de la cabecera no se comprobaba directamente, sino que se asignaba a una variable denominada **ux\_mag** y, posteriormente, se la denominaba el **número mágico**. Probablemente debido a su singularidad, el término **número mágico** pasó a designar el tipo de formato ejecutable, después se amplió para designar el tipo de sistema de archivos y se amplió de nuevo para designar cualquier tipo de archivo.

### En archivos

Los números mágicos son habituales en los programas de muchos sistemas operativos. Los números mágicos implementan datos con [tipado fuerte](https://en.wikipedia.org/wiki/Strongly%5Ftyped "Strongly typed") y son una forma de [señalización en banda](https://en.wikipedia.org/wiki/In-band%5Fsignaling "In-band signaling") para el programa de control que lee el tipo o los tipos de datos en tiempo de ejecución. Muchos archivos tienen constantes de este tipo que identifican los datos que contienen. Detectar estas constantes en los archivos es una manera sencilla y eficaz de distinguir entre muchos [formatos de archivo](https://en.wikipedia.org/wiki/File%5Fformat "File format") y puede aportar [información](https://en.wikipedia.org/wiki/Information "Information") adicional en tiempo de ejecución.

Ejemplos

* Los [archivos de clase de Java](https://en.wikipedia.org/wiki/Java%5Fclass%5Ffile "Java class file") [compilados](https://en.wikipedia.org/wiki/Compiler "Compiler") ([bytecode](https://en.wikipedia.org/wiki/Java%5Fbytecode "Java bytecode")) y los binarios [Mach-O](https://en.wikipedia.org/wiki/Mach%5F%28kernel%29 "Mach (kernel)") comienzan con el hexadecimal `CA FE BA BE`. Cuando se comprimen con [Pack200](https://en.wikipedia.org/wiki/Pack200 "Pack200"), los bytes cambian a `CA FE D0 0D`.
* Los archivos de imagen [GIF](https://en.wikipedia.org/wiki/GIF "GIF") contienen el código [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII") de «GIF89a» (`47 49 46 38 39 61`) o «GIF87a» (`47 49 46 38 37 61`)
* Los archivos de imagen [JPEG](https://en.wikipedia.org/wiki/JPEG "JPEG") comienzan con `FF D8` y terminan con `FF D9`. Los archivos JPEG/[JFIF](https://en.wikipedia.org/wiki/JFIF "JFIF") contienen la [cadena terminada en nulo](https://en.wikipedia.org/wiki/Null-terminated%5Fstring "Null-terminated string") «JFIF» (`4A 46 49 46 00`). Los archivos JPEG/[Exif](https://en.wikipedia.org/wiki/Exif "Exif") contienen la [cadena terminada en nulo](https://en.wikipedia.org/wiki/Null-terminated%5Fstring "Null-terminated string") «Exif» (`45 78 69 66 00`), seguida de más [metadatos](https://en.wikipedia.org/wiki/Metadata%5F%28computing%29 "Metadata (computing)") sobre el archivo.
* Los archivos de imagen [PNG](https://en.wikipedia.org/wiki/PNG "PNG") comienzan con una firma de 8 [bytes](https://en.wikipedia.org/wiki/Byte "Byte") que identifica el archivo como un archivo PNG y permite detectar problemas habituales de transferencia de archivos: «\\211PNG\\r\\n\\032\\n» (`89 50 4E 47 0D 0A 1A 0A`). Esa firma contiene varios caracteres de [salto de línea](https://en.wikipedia.org/wiki/Newline "Newline") para permitir detectar conversiones automáticas e injustificadas de los saltos de línea, como transferir el archivo mediante [FTP](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol "File Transfer Protocol") con el [modo de transferencia](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol#Protocol%5Foverview "File Transfer Protocol") _ASCII_ en lugar del modo _binario_.
* Los archivos de audio [MIDI](https://en.wikipedia.org/wiki/MIDI "MIDI") estándar contienen el código [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII") de «MThd» (**M**IDI **T**rack **h**ea**d**er, `4D 54 68 64`) seguido de más metadatos.
* Los scripts de [Unix](https://en.wikipedia.org/wiki/Unix "Unix") o [Linux](https://en.wikipedia.org/wiki/Linux "Linux") pueden comenzar con un [shebang](https://en.wikipedia.org/wiki/Shebang%5F%28Unix%29 "Shebang (Unix)") («#!», `23 21`) seguido de la ruta a un [intérprete](https://en.wikipedia.org/wiki/Interpreter%5Fdirective "Interpreter directive"), si es probable que el intérprete sea distinto de aquel desde el que se invocó el script.
* Los ejecutables [ELF](https://en.wikipedia.org/wiki/Executable%5Fand%5FLinkable%5FFormat "Executable and Linkable Format") comienzan con el byte `7F` seguido de «ELF» (`7F 45 4C 46`).
* Los archivos y programas [PostScript](https://en.wikipedia.org/wiki/PostScript "PostScript") comienzan con «%!» (`25 21`).
* Los archivos [PDF](https://en.wikipedia.org/wiki/PDF "PDF") comienzan con «%PDF» (hexadecimal `25 50 44 46`).
* Los archivos ejecutables [DOS MZ](https://en.wikipedia.org/wiki/DOS%5FMZ%5Fexecutable "DOS MZ executable") y el [código auxiliar EXE](https://en.wikipedia.org/wiki/EXE#Other "EXE") de los archivos [PE](https://en.wikipedia.org/wiki/Portable%5FExecutable "Portable Executable") (Portable Executable) de [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft%5FWindows "Microsoft Windows") comienzan con los caracteres «MZ» (`4D 5A`), las iniciales del diseñador del formato de archivo, [Mark Zbikowski](https://en.wikipedia.org/wiki/Mark%5FZbikowski "Mark Zbikowski"). La definición también admite el poco frecuente «ZM» (`5A 4D`) para dosZMXP, un EXE que no es PE.
* El formato del superbloque del [Berkeley Fast File System](https://en.wikipedia.org/wiki/Berkeley%5FFast%5FFile%5FSystem "Berkeley Fast File System") se identifica como `19 54 01 19` o `01 19 54` según la versión; ambos representan la fecha de nacimiento del autor, [Marshall Kirk McKusick](https://en.wikipedia.org/wiki/Marshall%5FKirk%5FMcKusick "Marshall Kirk McKusick").
* El [Master Boot Record](https://en.wikipedia.org/wiki/Master%5FBoot%5FRecord "Master Boot Record") de los dispositivos de almacenamiento arrancables en casi todos los [compatibles con IBM PC](https://en.wikipedia.org/wiki/IBM%5FPC%5Fcompatible "IBM PC compatible") [IA-32](https://en.wikipedia.org/wiki/IA-32 "IA-32") tiene el código `55 AA` como sus dos últimos bytes.
* Los ejecutables para las videoconsolas portátiles [Game Boy](https://en.wikipedia.org/wiki/Game%5FBoy "Game Boy") y [Game Boy Advance](https://en.wikipedia.org/wiki/Game%5FBoy%5FAdvance "Game Boy Advance") tienen un número mágico de 48 bytes o de 156 bytes, respectivamente, en un lugar fijo de la cabecera. Este número mágico codifica un mapa de bits del logotipo de [Nintendo](https://en.wikipedia.org/wiki/Nintendo "Nintendo").
* Los archivos ejecutables [Hunk](https://en.wikipedia.org/wiki/Amiga%5FHunk "Amiga Hunk") del software de [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga") que se ejecutaban en las máquinas clásicas [68000](https://en.wikipedia.org/wiki/68000 "68000") de Amiga comenzaban todos con el número hexadecimal $000003f3, apodado la «Magic Cookie».
* En el Amiga, la única dirección absoluta del sistema es el hexadecimal $0000 0004 (posición de memoria 4), que contiene la ubicación inicial llamada SysBase, un puntero a exec.library, el llamado [núcleo](https://en.wikipedia.org/wiki/Kernel%5F%28operating%5Fsystem%29 "Kernel (operating system)") del Amiga.
* Los archivos [PEF](https://en.wikipedia.org/wiki/Preferred%5FExecutable%5FFormat "Preferred Executable Format"), utilizados por el [Mac OS clásico](https://en.wikipedia.org/wiki/Classic%5FMac%5FOS "Classic Mac OS") y [BeOS](https://en.wikipedia.org/wiki/BeOS "BeOS") para los ejecutables de [PowerPC](https://en.wikipedia.org/wiki/PowerPC "PowerPC"), contienen el código [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII") de «Joy!» (`4A 6F 79 21`) como prefijo.
* Los archivos [TIFF](https://en.wikipedia.org/wiki/TIFF "TIFF") comienzan con «II» o «MM» seguido de [42](https://en.wikipedia.org/wiki/Answer%5Fto%5FLife,%5Fthe%5FUniverse,%5Fand%5FEverything "Answer to Life, the Universe, and Everything") como un entero de dos bytes con orden de bytes little o big [endian](https://en.wikipedia.org/wiki/Endianness "Endianness"). «II» corresponde a Intel, que usa el orden de bytes [little endian](https://en.wikipedia.org/wiki/Endianness "Endianness"), por lo que el número mágico es `49 49 2A 00`. «MM» corresponde a Motorola, que usa el orden de bytes [big endian](https://en.wikipedia.org/wiki/Endianness "Endianness"), por lo que el número mágico es `4D 4D 00 2A`.
* Los archivos de texto [Unicode](https://en.wikipedia.org/wiki/Unicode "Unicode") codificados en [UTF-16](https://en.wikipedia.org/wiki/UTF-16 "UTF-16") suelen comenzar con la [marca de orden de bytes](https://en.wikipedia.org/wiki/Byte%5FOrder%5FMark "Byte Order Mark") para detectar el [endianness](https://en.wikipedia.org/wiki/Endianness "Endianness") (`FE FF` para big endian y `FF FE` para little endian). Y en [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft%5FWindows "Microsoft Windows"), los archivos de texto [UTF-8](https://en.wikipedia.org/wiki/UTF-8 "UTF-8") suelen comenzar con la codificación UTF-8 del mismo carácter, `EF BB BF`.
* Los archivos de Bitcode de [LLVM](https://en.wikipedia.org/wiki/LLVM "LLVM") comienzan con «BC» (`42 43`).
* Los archivos [WAD](https://en.wikipedia.org/wiki/Doom%5FWAD "Doom WAD") comienzan con «IWAD» o «PWAD» (para _[Doom](https://en.wikipedia.org/wiki/Doom%5F%281993%5Fvideo%5Fgame%29 "Doom (1993 video game)")_), «WAD2» (para _[Quake](https://en.wikipedia.org/wiki/Quake%5F%28video%5Fgame%29 "Quake (video game)")_) y «WAD3» (para _[Half-Life](https://en.wikipedia.org/wiki/Half-Life%5F%28video%5Fgame%29 "Half-Life (video game)")_).
* Los archivos del [Compound File Binary Format](https://en.wikipedia.org/wiki/Compound%5FFile%5FBinary%5FFormat "Compound File Binary Format") de Microsoft (conocido sobre todo como uno de los formatos más antiguos de los documentos de [Microsoft Office](https://en.wikipedia.org/wiki/Microsoft%5FOffice "Microsoft Office")) comienzan con `D0 CF 11 E0`, que visualmente sugiere la palabra «DOCFILE0».
* Las cabeceras de los archivos [ZIP](https://en.wikipedia.org/wiki/ZIP%5F%28file%5Fformat%29 "ZIP (file format)") suelen mostrarse en los editores de texto como «PK♥♦» (`50 4B 03 04`), donde «PK» son las iniciales de [Phil Katz](https://en.wikipedia.org/wiki/Phil%5FKatz "Phil Katz"), autor de la utilidad de compresión de [DOS](https://en.wikipedia.org/wiki/DOS "DOS") [PKZIP](https://en.wikipedia.org/wiki/PKZIP "PKZIP").
* Las cabeceras de los archivos [7z](https://en.wikipedia.org/wiki/7z "7z") comienzan con «7z» (número mágico completo: `37 7A BC AF 27 1C`).

Detección

El programa de utilidad de Unix `[file](https://en.wikipedia.org/wiki/File%5F%28command%29 "File (command)")` puede leer e interpretar los números mágicos de los archivos, y el archivo que se usa para analizar la información se llama _magic_. La utilidad de Windows TrID tiene un propósito similar.

### En protocolos

Ejemplos

* El [protocolo OSCAR](https://en.wikipedia.org/wiki/OSCAR%5Fprotocol "OSCAR protocol"), usado en [AIM](https://en.wikipedia.org/wiki/AOL%5FInstant%5FMessenger "AOL Instant Messenger")/[ICQ](https://en.wikipedia.org/wiki/ICQ "ICQ"), antepone `2A` a las solicitudes.
* En el [protocolo RFB](https://en.wikipedia.org/wiki/RFB%5Fprotocol "RFB protocol") que usa [VNC](https://en.wikipedia.org/wiki/VNC "VNC"), un cliente inicia su conversación con un servidor enviando «RFB» (`52 46 42`, de «Remote Frame Buffer») seguido del número de versión del protocolo del cliente.
* En el protocolo [SMB](https://en.wikipedia.org/wiki/Server%5FMessage%5FBlock "Server Message Block") que usa Microsoft Windows, cada solicitud SMB o respuesta del servidor comienza con `FF 53 4D 42`, o `\xFFSMB` al inicio de la solicitud SMB.
* En el protocolo [MSRPC](https://en.wikipedia.org/wiki/MSRPC "MSRPC") que usa Microsoft Windows, cada solicitud basada en TCP comienza con `05` al inicio de la solicitud (que representa la versión 5 de Microsoft DCE/RPC), seguido inmediatamente de un `00` o un `01` para la versión menor. En las solicitudes MSRPC basadas en UDP, el primer byte es siempre `04`.
* En las interfaces serializadas de [COM](https://en.wikipedia.org/wiki/Component%5FObject%5FModel "Component Object Model") y [DCOM](https://en.wikipedia.org/wiki/Distributed%5FComponent%5FObject%5FModel "Distributed Component Object Model"), llamadas [OBJREF](https://en.wikipedia.org/wiki/OBJREF "OBJREF"), siempre comienzan con la secuencia de bytes «MEOW» (`4D 45 4F 57`). Las extensiones de depuración (usadas para interceptar el canal de DCOM) van precedidas de la secuencia de bytes «MARB» (`4D 41 52 42`).
* Las solicitudes sin cifrar al [rastreador de BitTorrent](https://en.wikipedia.org/wiki/BitTorrent%5Ftracker "BitTorrent tracker") comienzan con un único byte que contiene el valor `19`, que representa la longitud de la cabecera, seguido inmediatamente de la frase «BitTorrent protocol» en la posición de byte 1.
* El tráfico de [eDonkey2000](https://en.wikipedia.org/wiki/EDonkey2000 "EDonkey2000")/[eMule](https://en.wikipedia.org/wiki/EMule "EMule") comienza con un único byte que representa la versión del cliente. Actualmente `E3` representa un cliente eDonkey, `C5` representa eMule y `D4` representa eMule comprimido.
* Los primeros 4 bytes de un bloque de la cadena de bloques de [Bitcoin](https://en.wikipedia.org/wiki/Bitcoin "Bitcoin") contienen un número mágico que sirve como identificador de la red. El valor es `D9 B4 BE F9`, que indica la red principal, mientras que `DA B5 BF FA` indica la red de pruebas (testnet).
* Las transacciones [SSL](https://en.wikipedia.org/wiki/Secure%5FSockets%5FLayer "Secure Sockets Layer") siempre comienzan con un mensaje «client hello». El esquema de encapsulación de registros que se usa para anteponer a todos los paquetes SSL consta de formas de cabecera de dos y tres bytes. Normalmente, un mensaje client hello de SSL versión 2 va precedido de un `80` y una respuesta de un servidor SSLv3 a un client hello comienza con `16` (aunque esto puede variar).
* Los paquetes [DHCP](https://en.wikipedia.org/wiki/DHCP "DHCP") usan un valor de «magic cookie» de `63 82 53 63` al inicio de la sección de opciones del paquete. Este valor se incluye en todos los tipos de paquetes DHCP.
* Las conexiones [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2 "HTTP/2") comienzan con la cadena de 24 caracteres `PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n`. Está diseñada para evitar el procesamiento de tramas por parte de servidores e intermediarios que admiten versiones anteriores de HTTP, pero no la 2.0.
* El [protocolo de enlace inicial de WebSocket](https://en.wikipedia.org/wiki/WebSocket#Opening%5Fhandshake "WebSocket") usa una cadena que contiene el [UUIDv4](https://en.wikipedia.org/wiki/UUIDv4 "UUIDv4") `258EAFA5-E914-47DA-95CA-C5AB0DC85B11`.

### En interfaces

Los números mágicos son habituales en las [funciones de API](https://en.wikipedia.org/wiki/API%5Ffunction "API function") y las [interfaces](https://en.wikipedia.org/wiki/Interface%5F%28computing%29 "Interface (computing)") de muchos [sistemas operativos](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system"), como [DOS](https://en.wikipedia.org/wiki/DOS "DOS"), [Windows](https://en.wikipedia.org/wiki/Windows "Windows") y [NetWare](https://en.wikipedia.org/wiki/NetWare "NetWare"):

Ejemplos

* Las [BIOS](https://en.wikipedia.org/wiki/BIOS "BIOS") [compatibles con IBM PC](https://en.wikipedia.org/wiki/IBM%5FPC "IBM PC") usan los valores mágicos `00 00` y `12 34` para decidir si el sistema debe contar la memoria o no al reiniciar, realizando así un arranque en frío o en caliente. Estos valores también los usan los gestores de memoria [EMM386](https://en.wikipedia.org/wiki/EMM386 "EMM386") que interceptan las solicitudes de arranque. Las BIOS también usan los valores mágicos `55 AA` para determinar si un disco es arrancable.
* La caché de disco [SMARTDRV](https://en.wikipedia.org/wiki/SMARTDRV "SMARTDRV") de [MS-DOS](https://en.wikipedia.org/wiki/MS-DOS "MS-DOS") (cuyo nombre en clave era «Bambi») usa los valores mágicos `BA BE` y `EB AB` en las funciones de la API.
* Muchos controladores de [DR-DOS](https://en.wikipedia.org/wiki/DR-DOS "DR-DOS"), [Novell DOS](https://en.wikipedia.org/wiki/Novell%5FDOS "Novell DOS") y [OpenDOS](https://en.wikipedia.org/wiki/OpenDOS "OpenDOS") desarrollados en el antiguo _European Development Centre_ del Reino Unido usan el valor `0E DC` como token mágico al invocar o proporcionar funcionalidad adicional que se sitúa por encima de las funciones estándar (emuladas) de DOS, siendo NWCACHE un ejemplo.

### Otros usos

Ejemplos

* La [dirección MAC](https://en.wikipedia.org/wiki/MAC%5Faddress "MAC address") predeterminada en los [SoC](https://en.wikipedia.org/wiki/System%5Fon%5Fa%5Fchip "System on a chip") de Texas Instruments es `DE:AD:BE:EF:00:00`.

## GUID

Es posible crear o modificar los [identificadores globalmente únicos](https://en.wikipedia.org/wiki/Globally%5Funique%5Fidentifier "Globally unique identifier") (GUID) para que sean fáciles de recordar, pero esto está muy desaconsejado, ya que compromete su robustez como identificadores casi únicos. Las especificaciones para generar GUID y UUID son bastante complejas, que es lo que hace que sean prácticamente únicos si se implementan correctamente.

Los números de identificación de producto de Microsoft Windows para los productos de [Microsoft Office](https://en.wikipedia.org/wiki/Microsoft%5FOffice "Microsoft Office") a veces terminan con `0000-0000-0000000FF1CE` («OFFICE»), como `90160000-008C-0000-0000-0000000FF1CE`, el identificador de producto del «Office 16 Click-to-Run Extensibility Component».

Java usa varios GUID que comienzan con `CAFEEFAC`.

En la [tabla de particiones GUID](https://en.wikipedia.org/wiki/GUID%5FPartition%5FTable "GUID Partition Table") del esquema de particionado GPT, las [particiones BIOS Boot](https://en.wikipedia.org/wiki/BIOS%5FBoot%5Fpartition "BIOS Boot partition") usan el GUID especial `21686148-6449-6E6F-744E-656564454649`, que no sigue la definición de GUID; en su lugar, se forma utilizando los códigos [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII") de la cadena `Hah!IdontNeedEFI` parcialmente en orden [little endian](https://en.wikipedia.org/wiki/Little%5Fendian "Little endian").

## Valor de depuración

Los **valores mágicos de depuración** son valores concretos que se escriben en la [memoria](https://en.wikipedia.org/wiki/Random-access%5Fmemory "Random-access memory") durante la [asignación](https://en.wikipedia.org/wiki/Memory%5Fallocation "Memory allocation") o la liberación, de modo que más tarde sea posible saber si se han corrompido o no, y para que resulte evidente cuándo se están usando valores tomados de memoria sin inicializar. La memoria se suele visualizar en hexadecimal, por lo que son habituales los valores repetitivos memorables o los valores en [hexspeak](https://en.wikipedia.org/wiki/Hexspeak "Hexspeak"). Pueden preferirse los valores numéricamente impares para que los procesadores sin direccionamiento por bytes fallen al intentar usarlos como punteros (que deben situarse en direcciones pares). Conviene elegir valores que estén alejados de las direcciones probables (el código del programa, los datos estáticos, los datos del montón o la pila). De forma similar, pueden elegirse de modo que no sean códigos válidos en el conjunto de instrucciones de la arquitectura dada.

Dado que es muy improbable, aunque posible, que un entero de 32 bits adopte este valor concreto, la aparición de un número así en un [depurador](https://en.wikipedia.org/wiki/Debugger "Debugger") o un [volcado de memoria](https://en.wikipedia.org/wiki/Memory%5Fdump "Memory dump") indica con toda probabilidad un error como un desbordamiento de búfer o una [variable sin inicializar](https://en.wikipedia.org/wiki/Uninitialized%5Fvariable "Uninitialized variable").

Entre los ejemplos famosos y habituales se incluyen:

| Código           | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 00008123         | Se usa en MS Visual C++. Los punteros eliminados se establecen en este valor, de modo que lanzan una excepción cuando se usan después; es un alias más reconocible de la dirección cero. Se activa con la opción Security Development Lifecycle (/sdl).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ..FACADE         | _"Facade"_, usado por varios [RTOS](https://en.wikipedia.org/wiki/Real-time%5Foperating%5Fsystem "Real-time operating system").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 1BADB002         | _"1 bad boot"_, número mágico de la cabecera [Multiboot](https://en.wikipedia.org/wiki/Multiboot%5FSpecification "Multiboot Specification").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 8BADF00D         | _"Ate bad food"_, indica que una aplicación de [iOS](https://en.wikipedia.org/wiki/IOS "IOS") de [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") ha sido finalizada porque se produjo un tiempo de espera agotado del watchdog.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| A5A5A5A5         | Se usa en el desarrollo embebido porque el patrón de bits alterno (1010 0101) crea un patrón fácilmente reconocible en los [osciloscopios](https://en.wikipedia.org/wiki/Oscilloscope "Oscilloscope") y los [analizadores lógicos](https://en.wikipedia.org/wiki/Logic%5Fanalyzer "Logic analyzer").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| A5               | Se usa en el [malloc(3)](https://en.wikipedia.org/wiki/Malloc "Malloc") PHK de [FreeBSD](https://en.wikipedia.org/wiki/FreeBSD "FreeBSD") para depuración cuando /etc/malloc.conf está enlazado simbólicamente a "-J", para inicializar con este valor toda la memoria recién asignada, ya que no es un puntero NULL ni el carácter NUL de ASCII.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ABABABAB         | Lo usa el HeapAlloc() de depuración de [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar los [bytes de guarda](https://en.wikipedia.org/wiki/Guard%5Fbyte "Guard byte") de «tierra de nadie» después de la memoria de montón asignada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ABADBABE         | _"A bad babe"_, lo usa [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") como número mágico del «Boot Zero Block».                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ABBABABE         | _"[ABBA](https://en.wikipedia.org/wiki/ABBA "ABBA") babe"_, lo usa el montón de memoria de _[Driver: Parallel Lines](https://en.wikipedia.org/wiki/Driver:%5FParallel%5FLines "Driver: Parallel Lines")_.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ABADCAFE         | _"A bad cafe"_, se usa para inicializar toda la memoria no asignada (Mungwall, [AmigaOS](https://en.wikipedia.org/wiki/AmigaOS "AmigaOS")).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| B16B00B5         | _"Big Boobs"_, antiguamente lo requería el hipervisor [Hyper-V](https://en.wikipedia.org/wiki/Hyper-V "Hyper-V") de [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para que los invitados Linux lo usaran como la mitad superior de su «guest id».                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| BAADF00D         | _"Bad food"_, lo usa el HeapAlloc() de depuración de [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar la memoria de montón asignada y sin inicializar.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| BAAAAAAD         | _"Baaaaaad"_, indica que el registro de [iOS](https://en.wikipedia.org/wiki/IOS "IOS") de [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") es una instantánea de pila (stackshot) de todo el sistema, no un informe de fallos.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| BAD22222         | _"Bad too repeatedly"_, indica que una aplicación VoIP de [iOS](https://en.wikipedia.org/wiki/IOS "IOS") de [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") ha sido finalizada porque se reanudaba con demasiada frecuencia.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| BADBADBADBAD     | _"Bad bad bad bad"_, memoria «sin inicializar» de los [Burroughs Large Systems](https://en.wikipedia.org/wiki/Burroughs%5FLarge%5FSystems "Burroughs Large Systems") (palabras de 48 bits).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| BADC0FFEE0DDF00D | _"Bad coffee odd food"_, se usa en los sistemas [RS/6000](https://en.wikipedia.org/wiki/RS/6000 "RS/6000") de 64 bits de [IBM](https://en.wikipedia.org/wiki/IBM "IBM") para indicar registros de CPU sin inicializar.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| BADDCAFE         | _"Bad cafe"_, en [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") de [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems"), marca la memoria del núcleo sin inicializar (KMEM\_UNINITIALIZED\_PATTERN).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| BBADBEEF         | _"Bad beef"_, se usa en [WebKit](https://en.wikipedia.org/wiki/WebKit "WebKit") para errores especialmente irrecuperables.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| BEBEBEBE         | Lo usa [AddressSanitizer](https://en.wikipedia.org/wiki/AddressSanitizer "AddressSanitizer") para rellenar la memoria asignada pero no inicializada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| BEEFCACE         | _"Beef cake"_, lo usa [Microsoft .NET](https://en.wikipedia.org/wiki/Microsoft%5F.NET "Microsoft .NET") como número mágico en los archivos de recursos.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| C00010FF         | _"Cool off"_, indica que el sistema operativo cerró una aplicación de [iOS](https://en.wikipedia.org/wiki/IOS "IOS") de [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") en respuesta a un evento térmico.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| CAFEBABE         | _"Cafe babe"_, lo usa [Java](https://en.wikipedia.org/wiki/Java%5F%28programming%5Flanguage%29 "Java (programming language)") para los archivos de clase. Se usa en los binarios [Mach-O](https://en.wikipedia.org/wiki/Mach-O "Mach-O") multiarquitectura.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| CAFED00D         | _"Cafe dude"_, lo usa [Java](https://en.wikipedia.org/wiki/Java%5F%28programming%5Flanguage%29 "Java (programming language)") para su compresión [pack200](https://en.wikipedia.org/wiki/Pack200 "Pack200").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| CAFEFEED         | _"Cafe feed"_, lo usa el núcleo de depuración de [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") de [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems") para marcar la memoria de kmemfree().                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| CCCCCCCC         | Lo usan la biblioteca de tiempo de ejecución de depuración de C++ de [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") y muchos entornos DOS para marcar la memoria de [pila](https://en.wikipedia.org/wiki/Stack-based%5Fmemory%5Fallocation "Stack-based memory allocation") sin inicializar. CC es el código de operación de la interrupción de punto de interrupción de depuración [INT 3](https://en.wikipedia.org/wiki/INT%5F3 "INT 3") en los procesadores x86\.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| CDCDCDCD         | Lo usa la función malloc() de depuración de C/C++ de [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar la memoria de montón sin inicializar, normalmente devuelta por HeapAlloc.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| 0D15EA5E         | _"Zero Disease"_, se usa como bandera para indicar un arranque normal en las consolas [GameCube](https://en.wikipedia.org/wiki/GameCube "GameCube") y [Wii](https://en.wikipedia.org/wiki/Wii "Wii").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| DDDDDDDD         | Lo usan el SmartHeap de MicroQuill y la función free() de depuración de C/C++ de Microsoft para marcar la memoria de montón liberada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| DEAD10CC         | _"Dead lock"_, indica que una aplicación de [iOS](https://en.wikipedia.org/wiki/IOS "IOS") de [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") ha sido finalizada porque retuvo un recurso del sistema mientras se ejecutaba en segundo plano.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| DEADBABE         | _"Dead babe"_, se usa al inicio de los archivos de arena (arena) de [IRIX](https://en.wikipedia.org/wiki/IRIX "IRIX") de [Silicon Graphics](https://en.wikipedia.org/wiki/Silicon%5FGraphics "Silicon Graphics").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| DEADBEEF         | _"Dead beef"_, célebremente utilizado en sistemas de [IBM](https://en.wikipedia.org/wiki/IBM "IBM") como el [RS/6000](https://en.wikipedia.org/wiki/RS/6000 "RS/6000"), también usado en los [sistemas operativos](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system") [Mac OS clásico](https://en.wikipedia.org/wiki/Classic%5FMac%5FOS "Classic Mac OS"), [OPENSTEP Enterprise](https://en.wikipedia.org/wiki/OPENSTEP%5FEnterprise "OPENSTEP Enterprise") y el [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga") de [Commodore](https://en.wikipedia.org/wiki/Commodore%5FInternational "Commodore International"). En [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") de [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems"), marca la memoria del núcleo liberada (KMEM\_FREE\_PATTERN).                                                                                                                                                |
| DEADCAFE         | _"Dead cafe"_, lo usa [Microsoft .NET](https://en.wikipedia.org/wiki/Microsoft%5F.NET "Microsoft .NET") como número de error en las [DLL](https://en.wikipedia.org/wiki/Dynamic-link%5Flibrary "Dynamic-link library").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| DEADC0DE         | _"Dead code"_, se usa como marcador en el firmware de [OpenWRT](https://en.wikipedia.org/wiki/OpenWRT "OpenWRT") para indicar el comienzo del sistema de archivos jffs2 que se va a crear al final del firmware estático.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| DEADFA11         | _"Dead fail"_, indica que el usuario ha forzado el cierre de una aplicación de [iOS](https://en.wikipedia.org/wiki/IOS "IOS") de [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| DEADF00D         | _"Dead food"_, lo usa Mungwall en el [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga") de [Commodore](https://en.wikipedia.org/wiki/Commodore%5FInternational "Commodore International") para marcar la memoria asignada pero sin inicializar.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| DEFEC8ED         | _"Defecated"_, se usa para los [volcados de memoria](https://en.wikipedia.org/wiki/Core%5Fdump "Core dump") de [OpenSolaris](https://en.wikipedia.org/wiki/OpenSolaris "OpenSolaris").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| DEADDEAD         | _"Dead Dead"_, indica que el usuario inició deliberadamente un volcado de fallos, ya sea desde el depurador del núcleo o desde el teclado, en Microsoft Windows.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| D00D2BAD         | _"Dude, Too Bad",_ se usa en los fallos de Safari en macOS Big Sur.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| D00DF33D         | _"Dude feed",_ lo usa el [devicetree](https://en.wikipedia.org/wiki/Devicetree "Devicetree") para marcar el inicio de las cabeceras.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| EBEBEBEB         | Del SmartHeap de MicroQuill.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| FADEDEAD         | _"Fade dead"_, aparece al final para identificar cada script de [AppleScript](https://en.wikipedia.org/wiki/AppleScript "AppleScript").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| FDFDFDFD         | Lo usa la función malloc() de depuración de C/C++ de [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar los [bytes de guarda](https://en.wikipedia.org/wiki/Guard%5Fbyte "Guard byte") de «tierra de nadie» antes y después de la memoria de montón asignada, y algunas funciones de depuración del [Secure C-Runtime](https://en.wikipedia.org/wiki/C%5Fstandard%5Flibrary "C standard library") implementadas por Microsoft (p. ej., strncat\_s).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| FEE1DEAD         | _"Feel dead"_, lo usa la llamada al sistema reboot() de [Linux](https://en.wikipedia.org/wiki/Linux "Linux").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| FEEDFACE         | _"Feed face"_, aparece en los binarios [Mach-O](https://en.wikipedia.org/wiki/Mach-O "Mach-O") en la plataforma Mac OSX de [Apple Inc.](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") En [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") de [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems"), marca la zona roja (KMEM\_REDZONE\_PATTERN). Lo usan el [reproductor VLC](https://en.wikipedia.org/wiki/VLC%5Fplayer "VLC player") y algunas [cámaras IP](https://en.wikipedia.org/wiki/IP%5Fcamera "IP camera") en el protocolo [RTP](https://en.wikipedia.org/wiki/Real-time%5FTransport%5FProtocol "Real-time Transport Protocol")/[RTCP](https://en.wikipedia.org/wiki/RTCP "RTCP"); el reproductor VLC envía cuatro bytes en el orden del [endianness](https://en.wikipedia.org/wiki/Endianness "Endianness") del sistema. Algunas cámaras IP esperan que el reproductor envíe este número mágico y no inician la transmisión si no lo reciben. |
| FEEEFEEE         | _"Fee fee"_, lo usa el HeapFree() de depuración de [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar la memoria de montón liberada. Algunos valores internos de contabilidad cercanos también pueden tener la palabra alta establecida en FEEE.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |

La mayoría de estos tienen 32 [bits](https://en.wikipedia.org/wiki/Bit "Bit") de longitud – el [tamaño de palabra](https://en.wikipedia.org/wiki/Word%5Fsize "Word size") de la mayoría de los ordenadores de arquitectura de 32 bits.

La prevalencia de estos valores en la tecnología de Microsoft no es casualidad; se analizan en detalle en el libro de [Steve Maguire](https://en.wikipedia.org/wiki/Steve%5FMaguire "Steve Maguire") _Writing Solid Code_ de [Microsoft Press](https://en.wikipedia.org/wiki/Microsoft%5FPress "Microsoft Press"). Ofrece diversos criterios para estos valores, como:

* No deberían ser útiles; es decir, cabe esperar que la mayoría de los algoritmos que operan sobre ellos hagan algo inusual. Números como el cero no cumplen este criterio.
* El programador debería poder reconocerlos con facilidad como valores no válidos en el depurador.
* En las máquinas que no tienen [alineación de bytes](https://en.wikipedia.org/wiki/Byte%5Falignment "Byte alignment"), deberían ser [números impares](https://en.wikipedia.org/wiki/Odd%5Fnumber "Odd number"), de modo que desreferenciarlos como direcciones provoque una excepción.
* Deberían provocar una excepción, o quizá incluso una parada del depurador, si se ejecutan como código.

Dado que a menudo se usaban para marcar zonas de memoria que estaban esencialmente vacías, algunos de estos términos pasaron a usarse en expresiones que significan «desaparecido, abortado, expulsado de la memoria»; p. ej., «Your program is DEADBEEF» (tu programa está DEADBEEF).
