---
title: "Número mágico (programação)"
type: "antipattern"
slug: "magic-number"
url: "http://localhost:3000/pt-br/antipatterns/magic-number.md"
description: "Valor numérico com significado pouco claro"
---
# Número mágico (programação)

> Valor numérico com significado pouco claro

Em [programação de computadores](https://en.wikipedia.org/wiki/Computer%5Fprogramming "Computer programming"), um **número mágico** ou **assinatura de arquivo** é um [literal](https://en.wikipedia.org/wiki/Literal%5F%28computer%5Fprogramming%29 "Literal (computer programming)") [numérico](https://en.wikipedia.org/wiki/Numeric "Numeric") no [código-fonte](https://en.wikipedia.org/wiki/Source%5Fcode "Source code") que possui um significado especial e específico que não é totalmente claro para o leitor. Também em [computação](https://en.wikipedia.org/wiki/Computing "Computing"), mas não restrito à programação, o termo é usado para um número que identifica um conceito específico, mas cujo significado não é totalmente claro sem conhecimento adicional. Por exemplo, alguns [formatos de arquivo](https://en.wikipedia.org/wiki/File%5Fformat "File format") são identificados por um número mágico embutido no [arquivo](https://en.wikipedia.org/wiki/Computer%5Ffile "Computer file") ). Além disso, um número que está associado de forma relativamente única a um conceito específico, como um [identificador único universal](https://en.wikipedia.org/wiki/Universally%5Funique%5Fidentifier "Universally unique identifier"), pode ser classificado como número mágico.

## Literal numérico

Um **número mágico** ou **constante mágica** é um [literal](https://en.wikipedia.org/wiki/Literal%5F%28computer%5Fprogramming%29 "Literal (computer programming)") numérico no código-fonte que possui um significado especial e pouco claro no contexto. Isso é considerado um [antipadrão](https://en.wikipedia.org/wiki/Anti-pattern "Anti-pattern") e quebra uma das regras mais antigas da programação, que remonta aos manuais de [COBOL](https://en.wikipedia.org/wiki/COBOL "COBOL"), [FORTRAN](https://en.wikipedia.org/wiki/FORTRAN "FORTRAN") e [PL/1](https://en.wikipedia.org/wiki/PL/1 "PL/1") da década de 1960\.

Por exemplo, no código a seguir, que calcula um preço após impostos, `1.05` é um número mágico, já que o valor codifica a alíquota do imposto sobre vendas, 5%, de uma forma pouco óbvia.

price_after_tax = 1.05 * price

O uso de números mágicos no código obscurece a intenção dos desenvolvedores ao escolher aquele número, aumenta as chances de erros sutis e torna mais difícil adaptar e estender o programa no futuro. Como exemplo, é difícil saber se cada dígito em `3.14159265358979323846` foi digitado corretamente, ou se essa constante de [pi](https://en.wikipedia.org/wiki/Pi "Pi") pode ser [truncada](https://en.wikipedia.org/wiki/Truncation "Truncation") para `3.14159` sem afetar a funcionalidade do programa com sua precisão reduzida. Substituir todos os números mágicos significativos por [constantes](https://en.wikipedia.org/wiki/Constant%5F%28programming%29 "Constant (programming)") nomeadas (também chamadas de variáveis explicativas) torna os programas mais fáceis de ler, entender e manter.

O exemplo acima pode ser melhorado adicionando uma variável com nome descritivo:

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

Um bom nome pode resultar em código mais facilmente compreendido por um mantenedor que não seja o autor original, e até pelo próprio autor original depois de algum tempo. Um exemplo de constante com nome pouco informativo é `int SIXTEEN = 16`, enquanto `int NUMBER_OF_BITS = 16` pode ser mais útil.

Dados não numéricos podem ter as mesmas propriedades mágicas e, portanto, os mesmos problemas dos números mágicos. Assim, declarar `const string testUserName = "John"` e usar `testUserName` pode ser melhor do que usar o literal `"John"` diretamente.

### Exemplo

Por exemplo, se for necessário embaralhar aleatoriamente os valores em um vetor que representa um baralho padrão de [cartas de baralho](https://en.wikipedia.org/wiki/Playing%5Fcards "Playing cards"), este [pseudocódigo](https://en.wikipedia.org/wiki/Pseudocode "Pseudocode") realiza a tarefa usando o algoritmo de [embaralhamento 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)

onde `a` é um objeto vetor, a função `randomInt(x)` escolhe um inteiro aleatório entre 1 e _x_, inclusive, e `swapEntries(i, j)` troca a _i_\-ésima e a _j_\-ésima entradas do vetor. No exemplo anterior, `52` e `53` são números mágicos, e além disso não têm relação clara entre si. É considerado melhor estilo de programação escrever o seguinte:

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

Isso é preferível por vários motivos:

* **Melhor legibilidade**. Um programador que lê o primeiro exemplo pode se perguntar: _O que o número 52 significa aqui? Por que 52?_ O programador talvez consiga inferir o significado após ler o código com atenção, mas isso não é óbvio. Os números mágicos tornam-se particularmente confusos quando o mesmo número é usado para finalidades diferentes em uma mesma seção do código.
* **Mais fácil de manter**. É mais fácil alterar o valor do número, pois ele não está duplicado. Mudar o valor de um número mágico é propenso a erros, porque o mesmo valor costuma ser usado várias vezes em diferentes lugares do programa. Além disso, quando duas variáveis ou números semanticamente distintos têm o mesmo valor, eles podem ser acidentalmente editados juntos. Para modificar o primeiro exemplo de modo a embaralhar um baralho de [Tarô](https://en.wikipedia.org/wiki/Tarot "Tarot"), que tem 78 cartas, um programador poderia ingenuamente substituir cada ocorrência de 52 no programa por 78\. Isso causaria dois problemas. Primeiro, deixaria passar o valor 53 na segunda linha do exemplo, o que faria o algoritmo falhar de forma sutil. Segundo, provavelmente substituiria os caracteres "52" em todos os lugares, independentemente de se referirem ao tamanho do baralho ou a algo completamente diferente, como o número de semanas em um ano do calendário gregoriano, ou, de forma mais traiçoeira, fazerem parte de um número como "1523", o que tudo introduziria bugs. Em contraste, mudar o valor da variável `deckSize` no segundo exemplo seria uma alteração simples, de uma única linha.
* **Incentiva a documentação**. O único lugar onde a variável nomeada é declarada é um bom lugar para documentar o que o valor significa e por que ele tem esse valor. Ter o mesmo valor em uma infinidade de lugares ou leva a comentários duplicados (e aos problemas decorrentes de atualizar alguns e esquecer outros) ou não deixa nenhum _único_ lugar onde seja ao mesmo tempo natural para o autor explicar o valor e provável que o leitor procure por uma explicação.
* **Agrupa informações**. As declarações das variáveis de "números mágicos" podem ser colocadas juntas, geralmente no início de uma função ou arquivo, facilitando sua revisão e alteração.
* **Detecta [erros de digitação](https://en.wikipedia.org/wiki/Typo "Typo")**. Usar uma variável (em vez de um literal) aproveita a verificação do compilador. Digitar acidentalmente "62" em vez de "52" passaria despercebido, ao passo que digitar "`dekSize`" em vez de "`deckSize`" faria o compilador avisar que `dekSize` não foi declarada.
* **Reduz a digitação**. Se uma [IDE](https://en.wikipedia.org/wiki/Integrated%5Fdevelopment%5Fenvironment "Integrated development environment") oferecer suporte a [autocompletar código](https://en.wikipedia.org/wiki/Code%5Fcompletion "Code completion"), ela preencherá a maior parte do nome da variável a partir das primeiras letras.
* **Facilita a parametrização**. Por exemplo, para generalizar o exemplo acima em um procedimento que embaralha um baralho com qualquer número de cartas, bastaria transformar `deckSize` em um parâmetro desse procedimento, ao passo que o primeiro exemplo exigiria várias alterações.

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

As desvantagens são:

* **Quebra a localidade**. Quando a constante nomeada não é definida perto de seu uso, isso prejudica a localidade e, portanto, a compreensibilidade do código. Colocar o 52 em um lugar possivelmente distante significa que, para entender completamente o funcionamento do laço "for" (por exemplo, para estimar o tempo de execução do laço), é preciso localizar a definição e verificar se é o número esperado. Isso é fácil de evitar (realocando a declaração) quando a constante é usada em apenas uma parte do código. Por outro lado, quando a constante nomeada é usada em partes distintas, a localização remota é uma pista para o leitor de que o mesmo valor aparece em outros lugares do código, que também podem valer a pena ser investigados.
* **Causa verbosidade**. A declaração da constante acrescenta uma linha. Quando o nome da constante é mais longo do que o valor, em especial se várias dessas constantes aparecem em uma linha, pode ser necessário dividir uma única instrução lógica do código em várias linhas. Um aumento de verbosidade pode se justificar quando há alguma probabilidade de confusão sobre a constante, ou quando há probabilidade de a constante precisar ser alterada, como o [reaproveitamento](https://en.wikipedia.org/wiki/Code%5Freuse "Code reuse") de uma rotina de embaralhamento para outros jogos de cartas. Pode igualmente se justificar como um aumento de expressividade.
* **Considerações de desempenho**. Processar a expressão `deckSize + 1` em tempo de execução pode ser mais lento do que o valor "53". Dito isso, a maioria dos compiladores modernos usa técnicas como [dobra de constantes](https://en.wikipedia.org/wiki/Constant%5Ffolding "Constant folding") e [otimização de laços](https://en.wikipedia.org/wiki/Loop%5Foptimization "Loop optimization") para resolver a adição durante a compilação, de modo que normalmente não há penalidade de velocidade, ou ela é desprezível, em comparação ao uso de números mágicos no código. Sobretudo o custo de depuração e o tempo necessário para tentar entender um código não explicativo devem ser pesados contra o ínfimo custo de cálculo.

### Uso aceito

Quando um literal numérico carece de significado especial, seu uso não é classificado como mágico, embora o que constitui "especial" seja subjetivo. Exemplos de literais que com frequência não são considerados mágicos incluem:

* Uso de 0 e 1 como valores iniciais ou de incremento em um [laço for](https://en.wikipedia.org/wiki/For%5Floop "For loop"), como em `for (int i = 0; i < max; i += 1)`
* Uso do 2 para verificar se um número é par ou ímpar, como em `isEven = (x % 2 == 0)`, onde `%` é o operador [módulo](https://en.wikipedia.org/wiki/Modulo "Modulo")
* Uso de literais simples, p. ex., em expressões como `circumference = 2 * Math.PI * radius`, ou para calcular o [discriminante](https://en.wikipedia.org/wiki/Discriminant "Discriminant") de uma [equação quadrática](https://en.wikipedia.org/wiki/Quadratic%5Fequation "Quadratic equation") como `d = b^2 − 4*a*c`
* Uso de potências de 10 para converter valores métricos (p. ex. entre gramas e quilogramas) ou para calcular valores de porcentagem e [por mil](https://en.wikipedia.org/wiki/Per%5Fmille "Per mille")
* Expoentes em expressões como `(f(x) ** 2 + f(y) ** 2) ** 0.5` para f ( x ) 2 + f ( y ) 2 {\\displaystyle {\\sqrt {f(x)^{2}+f(y)^{2}}}}
* Os literais 1 e 0 são às vezes usados para representar os valores [booleanos](https://en.wikipedia.org/wiki/Boolean%5Fdata%5Ftype "Boolean data type") verdadeiro e falso. É discutível, mas atribuir esses valores a nomes como TRUE e FALSE pode ser melhor.
* Em C e C++, o 0 é frequentemente usado para significar [ponteiro nulo](https://en.wikipedia.org/wiki/Null%5Fpointer "Null pointer"), embora a biblioteca padrão de C defina uma macro `NULL` e o C++ moderno inclua a palavra-chave `nullptr`.

## Indicador de formato

### Origem

Os indicadores de formato foram usados pela primeira vez no código-fonte do início do [Version 7 Unix](https://en.wikipedia.org/wiki/Version%5F7%5FUnix "Version 7 Unix").

O [Unix](https://en.wikipedia.org/wiki/Unix "Unix") foi portado para um dos primeiros [DEC](https://en.wikipedia.org/wiki/Digital%5FEquipment%5FCorporation "Digital Equipment Corporation") [PDP-11](https://en.wikipedia.org/wiki/PDP-11 "PDP-11")/20, que não tinha [proteção de memória](https://en.wikipedia.org/wiki/Memory%5Fprotection "Memory protection"). Por isso, as primeiras versões do Unix usavam o modelo de [referência de memória realocável](https://en.wikipedia.org/wiki/Position-independent%5Fcode "Position-independent code"). As versões anteriores à [Sixth Edition Unix](https://en.wikipedia.org/wiki/Sixth%5FEdition%5FUnix "Sixth Edition Unix") liam um arquivo executável para a [memória](https://en.wikipedia.org/wiki/Magnetic-core%5Fmemory "Magnetic-core memory") e saltavam para o primeiro endereço de memória baixa do programa, o [endereço relativo](https://en.wikipedia.org/wiki/Relative%5Faddress "Relative address") zero. Com o desenvolvimento das versões [paginadas](https://en.wikipedia.org/wiki/Memory%5Fpage "Memory page") do Unix, foi criado um [cabeçalho](https://en.wikipedia.org/wiki/Header%5F%28computing%29 "Header (computing)") para descrever os componentes da [imagem executável](https://en.wikipedia.org/wiki/Executable "Executable"). Além disso, uma [instrução de desvio](https://en.wikipedia.org/wiki/Branch%5Finstruction "Branch instruction") foi inserida como a primeira palavra do cabeçalho para pular o cabeçalho e iniciar o programa. Dessa forma, um programa podia ser executado no modo (regular) mais antigo de referência de memória realocável ou no modo paginado. À medida que mais formatos de executável foram desenvolvidos, novas constantes foram adicionadas incrementando o [deslocamento](https://en.wikipedia.org/wiki/Offset%5F%28computer%5Fscience%29 "Offset (computer science)") do desvio.

No [código-fonte](https://en.wikipedia.org/wiki/Lions%27%5FCommentary%5Fon%5FUNIX%5F6th%5FEdition,%5Fwith%5FSource%5FCode "Lions' Commentary on UNIX 6th Edition, with Source Code") da [Sixth Edition](https://en.wikipedia.org/wiki/Version%5F6%5FUnix "Version 6 Unix") do carregador de programas do Unix, a função exec() lia a imagem executável ([binária](https://en.wikipedia.org/wiki/Binary%5Fnumeral%5Fsystem "Binary numeral system")) do sistema de arquivos. Os primeiros 8 [bytes](https://en.wikipedia.org/wiki/Byte "Byte") do arquivo eram um [cabeçalho](https://en.wikipedia.org/wiki/Header%5F%28computing%29 "Header (computing)") contendo os tamanhos das áreas de dados do programa (texto) e inicializados (globais). Além disso, a primeira palavra de 16 bits do cabeçalho era comparada a duas [constantes](https://en.wikipedia.org/wiki/Constant%5F%28programming%29 "Constant (programming)") para determinar se a [imagem executável](https://en.wikipedia.org/wiki/Executable "Executable") continha [referências de memória realocáveis](https://en.wikipedia.org/wiki/Position-independent%5Fcode "Position-independent code") (normal), a imagem executável [paginada](https://en.wikipedia.org/wiki/Memory%5Fpage "Memory page") somente leitura recém-implementada, ou a imagem paginada com instrução e dados separados. Não havia menção ao papel duplo da constante do cabeçalho, mas o byte de ordem mais alta da constante era, na verdade, o [código de operação](https://en.wikipedia.org/wiki/Operation%5Fcode "Operation code") da instrução de desvio do PDP-11 ([octal](https://en.wikipedia.org/wiki/Octal "Octal") 000407 ou [hexadecimal](https://en.wikipedia.org/wiki/Hexadecimal "Hexadecimal") 0107). Somar sete ao contador de programa mostrava que, se essa constante fosse executada, ela desviaria o serviço exec() do Unix por cima do cabeçalho de oito bytes da imagem executável e iniciaria o programa.

Como a Sixth e a Seventh Edition do Unix empregavam código de paginação, o papel duplo da constante do cabeçalho ficava oculto. Ou seja, o serviço exec() lia os dados ([meta](https://en.wikipedia.org/wiki/Meta%5F%28prefix%29 "Meta (prefix)")) do cabeçalho do arquivo executável para um buffer no [espaço do kernel](https://en.wikipedia.org/wiki/Kernel%5Fspace "Kernel space"), mas lia a imagem executável para o [espaço do usuário](https://en.wikipedia.org/wiki/User%5Fspace "User space"), não utilizando assim o recurso de desvio da constante. A criação de números mágicos foi implementada no [ligador (linker)](https://en.wikipedia.org/wiki/Linker%5F%28computing%29 "Linker (computing)") e no [carregador (loader)](https://en.wikipedia.org/wiki/Loader%5F%28computing%29 "Loader (computing)") do Unix, e o desvio por número mágico provavelmente ainda era usado no 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 acompanhavam a Sixth e a Seventh Edition. Assim, a constante do cabeçalho de fato proporcionava uma ilusão e atendia aos critérios de [magia](https://en.wikipedia.org/wiki/Magic%5F%28programming%29 "Magic (programming)").

No Version Seven Unix, a constante do cabeçalho não era testada diretamente, mas atribuída a uma variável rotulada **ux\_mag** e, posteriormente, referida como o **número mágico**. Provavelmente por causa de sua unicidade, o termo **número mágico** passou a significar o tipo de formato de executável, depois se expandiu para significar o tipo de sistema de arquivos e expandiu-se novamente para significar qualquer tipo de arquivo.

### Em arquivos

Os números mágicos são comuns em programas de muitos sistemas operacionais. Os números mágicos implementam dados [fortemente tipados](https://en.wikipedia.org/wiki/Strongly%5Ftyped "Strongly typed") e são uma forma de [sinalização em banda](https://en.wikipedia.org/wiki/In-band%5Fsignaling "In-band signaling") para o programa controlador que lê o(s) tipo(s) de dado em tempo de execução do programa. Muitos arquivos têm constantes desse tipo que identificam os dados contidos. Detectar essas constantes em arquivos é uma maneira simples e eficaz de distinguir entre muitos [formatos de arquivo](https://en.wikipedia.org/wiki/File%5Fformat "File format") e pode fornecer [informações](https://en.wikipedia.org/wiki/Information "Information") adicionais em tempo de execução.

Exemplos

* [Arquivos de classe 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")) e binários [Mach-O](https://en.wikipedia.org/wiki/Mach%5F%28kernel%29 "Mach (kernel)") começam com o hexadecimal `CA FE BA BE`. Quando comprimidos com [Pack200](https://en.wikipedia.org/wiki/Pack200 "Pack200"), os bytes são alterados para `CA FE D0 0D`.
* Os arquivos de imagem [GIF](https://en.wikipedia.org/wiki/GIF "GIF") têm o código [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII") de "GIF89a" (`47 49 46 38 39 61`) ou "GIF87a" (`47 49 46 38 37 61`)
* Os arquivos de imagem [JPEG](https://en.wikipedia.org/wiki/JPEG "JPEG") começam com `FF D8` e terminam com `FF D9`. Os arquivos JPEG/[JFIF](https://en.wikipedia.org/wiki/JFIF "JFIF") contêm a [string terminada em nulo](https://en.wikipedia.org/wiki/Null-terminated%5Fstring "Null-terminated string") "JFIF" (`4A 46 49 46 00`). Os arquivos JPEG/[Exif](https://en.wikipedia.org/wiki/Exif "Exif") contêm a [string terminada em nulo](https://en.wikipedia.org/wiki/Null-terminated%5Fstring "Null-terminated string") "Exif" (`45 78 69 66 00`), seguida de mais [metadados](https://en.wikipedia.org/wiki/Metadata%5F%28computing%29 "Metadata (computing)") sobre o arquivo.
* Os arquivos de imagem [PNG](https://en.wikipedia.org/wiki/PNG "PNG") começam com uma assinatura de 8 [bytes](https://en.wikipedia.org/wiki/Byte "Byte") que identifica o arquivo como um arquivo PNG e permite detectar problemas comuns de transferência de arquivos: "\\211PNG\\r\\n\\032\\n" (`89 50 4E 47 0D 0A 1A 0A`). Essa assinatura contém vários caracteres de [nova linha](https://en.wikipedia.org/wiki/Newline "Newline") para permitir a detecção de conversões automáticas indevidas de quebras de linha, como a transferência do arquivo via [FTP](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol "File Transfer Protocol") com o [modo de transferência](https://en.wikipedia.org/wiki/File%5FTransfer%5FProtocol#Protocol%5Foverview "File Transfer Protocol") _ASCII_ em vez do modo _binário_.
* Os arquivos de áudio [MIDI](https://en.wikipedia.org/wiki/MIDI "MIDI") padrão têm o 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 mais metadados.
* Os scripts [Unix](https://en.wikipedia.org/wiki/Unix "Unix") ou [Linux](https://en.wikipedia.org/wiki/Linux "Linux") podem começar com um [shebang](https://en.wikipedia.org/wiki/Shebang%5F%28Unix%29 "Shebang (Unix)") ("#!", `23 21`) seguido do caminho para um [interpretador](https://en.wikipedia.org/wiki/Interpreter%5Fdirective "Interpreter directive"), caso o interpretador provavelmente seja diferente daquele a partir do qual o script foi invocado.
* Os executáveis [ELF](https://en.wikipedia.org/wiki/Executable%5Fand%5FLinkable%5FFormat "Executable and Linkable Format") começam com o byte `7F` seguido de "ELF" (`7F 45 4C 46`).
* Os arquivos e programas [PostScript](https://en.wikipedia.org/wiki/PostScript "PostScript") começam com "%!" (`25 21`).
* Os arquivos [PDF](https://en.wikipedia.org/wiki/PDF "PDF") começam com "%PDF" (hexadecimal `25 50 44 46`).
* Os arquivos [executáveis DOS MZ](https://en.wikipedia.org/wiki/DOS%5FMZ%5Fexecutable "DOS MZ executable") e o [stub EXE](https://en.wikipedia.org/wiki/EXE#Other "EXE") dos arquivos [PE](https://en.wikipedia.org/wiki/Portable%5FExecutable "Portable Executable") (Portable Executable) do [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft%5FWindows "Microsoft Windows") começam com os caracteres "MZ" (`4D 5A`), as iniciais do projetista do formato de arquivo, [Mark Zbikowski](https://en.wikipedia.org/wiki/Mark%5FZbikowski "Mark Zbikowski"). A definição também permite o incomum "ZM" (`5A 4D`) para o dosZMXP, um EXE que não é PE.
* O formato de superbloco do [Berkeley Fast File System](https://en.wikipedia.org/wiki/Berkeley%5FFast%5FFile%5FSystem "Berkeley Fast File System") é identificado como `19 54 01 19` ou `01 19 54`, dependendo da versão; ambos representam a data de nascimento do autor, [Marshall Kirk McKusick](https://en.wikipedia.org/wiki/Marshall%5FKirk%5FMcKusick "Marshall Kirk McKusick").
* O [Master Boot Record](https://en.wikipedia.org/wiki/Master%5FBoot%5FRecord "Master Boot Record") de dispositivos de armazenamento inicializáveis em quase todos os [compatíveis com IBM PC](https://en.wikipedia.org/wiki/IBM%5FPC%5Fcompatible "IBM PC compatible") [IA-32](https://en.wikipedia.org/wiki/IA-32 "IA-32") tem o código `55 AA` como seus dois últimos bytes.
* Os executáveis para os videogames portáteis [Game Boy](https://en.wikipedia.org/wiki/Game%5FBoy "Game Boy") e [Game Boy Advance](https://en.wikipedia.org/wiki/Game%5FBoy%5FAdvance "Game Boy Advance") têm um número mágico de 48 bytes ou 156 bytes, respectivamente, em um ponto fixo do cabeçalho. Esse número mágico codifica um bitmap do logotipo da [Nintendo](https://en.wikipedia.org/wiki/Nintendo "Nintendo").
* Os arquivos executáveis [Hunk](https://en.wikipedia.org/wiki/Amiga%5FHunk "Amiga Hunk") de software do [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga"), executados em máquinas Amiga clássicas com [68000](https://en.wikipedia.org/wiki/68000 "68000"), começavam todos com o número hexadecimal $000003f3, apelidado de "Magic Cookie".
* No Amiga, o único endereço absoluto do sistema é o hexadecimal $0000 0004 (posição de memória 4), que contém a posição inicial chamada SysBase, um ponteiro para a exec.library, o chamado [kernel](https://en.wikipedia.org/wiki/Kernel%5F%28operating%5Fsystem%29 "Kernel (operating system)") do Amiga.
* Os arquivos [PEF](https://en.wikipedia.org/wiki/Preferred%5FExecutable%5FFormat "Preferred Executable Format"), usados pelo [Mac OS clássico](https://en.wikipedia.org/wiki/Classic%5FMac%5FOS "Classic Mac OS") e pelo [BeOS](https://en.wikipedia.org/wiki/BeOS "BeOS") para executáveis [PowerPC](https://en.wikipedia.org/wiki/PowerPC "PowerPC"), contêm o código [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII") de "Joy!" (`4A 6F 79 21`) como prefixo.
* Os arquivos [TIFF](https://en.wikipedia.org/wiki/TIFF "TIFF") começam com "II" ou "MM" seguido de [42](https://en.wikipedia.org/wiki/Answer%5Fto%5FLife,%5Fthe%5FUniverse,%5Fand%5FEverything "Answer to Life, the Universe, and Everything") como um inteiro de dois bytes na ordenação de bytes [little ou big endian](https://en.wikipedia.org/wiki/Endianness "Endianness"). "II" é de Intel, que usa a ordenação de bytes [little endian](https://en.wikipedia.org/wiki/Endianness "Endianness"), então o número mágico é `49 49 2A 00`. "MM" é de Motorola, que usa a ordenação de bytes [big endian](https://en.wikipedia.org/wiki/Endianness "Endianness"), então o número mágico é `4D 4D 00 2A`.
* Os arquivos de texto [Unicode](https://en.wikipedia.org/wiki/Unicode "Unicode") codificados em [UTF-16](https://en.wikipedia.org/wiki/UTF-16 "UTF-16") frequentemente começam com a [Byte Order Mark](https://en.wikipedia.org/wiki/Byte%5FOrder%5FMark "Byte Order Mark") para detectar a [endianness](https://en.wikipedia.org/wiki/Endianness "Endianness") (`FE FF` para big endian e `FF FE` para little endian). E no [Microsoft Windows](https://en.wikipedia.org/wiki/Microsoft%5FWindows "Microsoft Windows"), os arquivos de texto [UTF-8](https://en.wikipedia.org/wiki/UTF-8 "UTF-8") frequentemente começam com a codificação UTF-8 do mesmo caractere, `EF BB BF`.
* Os arquivos Bitcode [LLVM](https://en.wikipedia.org/wiki/LLVM "LLVM") começam com "BC" (`42 43`).
* Os arquivos [WAD](https://en.wikipedia.org/wiki/Doom%5FWAD "Doom WAD") começam com "IWAD" ou "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)")_) e "WAD3" (para _[Half-Life](https://en.wikipedia.org/wiki/Half-Life%5F%28video%5Fgame%29 "Half-Life (video game)")_).
* Os arquivos do [Compound File Binary Format](https://en.wikipedia.org/wiki/Compound%5FFile%5FBinary%5FFormat "Compound File Binary Format") da Microsoft (mais conhecido como um dos formatos mais antigos de documentos do [Microsoft Office](https://en.wikipedia.org/wiki/Microsoft%5FOffice "Microsoft Office")) começam com `D0 CF 11 E0`, que visualmente sugere a palavra "DOCFILE0".
* Os cabeçalhos em arquivos [ZIP](https://en.wikipedia.org/wiki/ZIP%5F%28file%5Fformat%29 "ZIP (file format)") frequentemente aparecem em editores de texto como "PK♥♦" (`50 4B 03 04`), onde "PK" são as iniciais de [Phil Katz](https://en.wikipedia.org/wiki/Phil%5FKatz "Phil Katz"), autor do utilitário de compressão [PKZIP](https://en.wikipedia.org/wiki/PKZIP "PKZIP") do [DOS](https://en.wikipedia.org/wiki/DOS "DOS").
* Os cabeçalhos em arquivos [7z](https://en.wikipedia.org/wiki/7z "7z") começam com "7z" (número mágico completo: `37 7A BC AF 27 1C`).

Detecção

O programa utilitário `[file](https://en.wikipedia.org/wiki/File%5F%28command%29 "File (command)")` do Unix pode ler e interpretar números mágicos de arquivos, e o arquivo usado para analisar a informação é chamado de _magic_. O utilitário TrID do Windows tem propósito semelhante.

### Em protocolos

Exemplos

* O [protocolo OSCAR](https://en.wikipedia.org/wiki/OSCAR%5Fprotocol "OSCAR protocol"), usado no [AIM](https://en.wikipedia.org/wiki/AOL%5FInstant%5FMessenger "AOL Instant Messenger")/[ICQ](https://en.wikipedia.org/wiki/ICQ "ICQ"), prefixa as requisições com `2A`.
* No [protocolo RFB](https://en.wikipedia.org/wiki/RFB%5Fprotocol "RFB protocol") usado pelo [VNC](https://en.wikipedia.org/wiki/VNC "VNC"), um cliente inicia sua conversa com um servidor enviando "RFB" (`52 46 42`, de "Remote Frame Buffer") seguido do número da versão do protocolo do cliente.
* No protocolo [SMB](https://en.wikipedia.org/wiki/Server%5FMessage%5FBlock "Server Message Block") usado pelo Microsoft Windows, cada requisição SMB ou resposta do servidor começa com `FF 53 4D 42`, ou `\xFFSMB` no início da requisição SMB.
* No protocolo [MSRPC](https://en.wikipedia.org/wiki/MSRPC "MSRPC") usado pelo Microsoft Windows, cada requisição baseada em TCP começa com `05` no início da requisição (representando o Microsoft DCE/RPC Versão 5), seguido imediatamente por um `00` ou `01` para a versão secundária. Nas requisições MSRPC baseadas em UDP, o primeiro byte é sempre `04`.
* Nas interfaces empacotadas (marshalled) [COM](https://en.wikipedia.org/wiki/Component%5FObject%5FModel "Component Object Model") e [DCOM](https://en.wikipedia.org/wiki/Distributed%5FComponent%5FObject%5FModel "Distributed Component Object Model"), chamadas de [OBJREFs](https://en.wikipedia.org/wiki/OBJREF "OBJREF"), sempre começam com a sequência de bytes "MEOW" (`4D 45 4F 57`). As extensões de depuração (usadas para o hooking de canais DCOM) são precedidas pela sequência de bytes "MARB" (`4D 41 52 42`).
* As requisições não criptografadas de [tracker BitTorrent](https://en.wikipedia.org/wiki/BitTorrent%5Ftracker "BitTorrent tracker") começam com um único byte contendo o valor `19`, que representa o comprimento do cabeçalho, seguido imediatamente pela frase "BitTorrent protocol" na posição de byte 1.
* O tráfego [eDonkey2000](https://en.wikipedia.org/wiki/EDonkey2000 "EDonkey2000")/[eMule](https://en.wikipedia.org/wiki/EMule "EMule") começa com um único byte representando a versão do cliente. Atualmente, `E3` representa um cliente eDonkey, `C5` representa o eMule e `D4` representa o eMule comprimido.
* Os primeiros 4 bytes de um bloco na blockchain do [Bitcoin](https://en.wikipedia.org/wiki/Bitcoin "Bitcoin") contêm um número mágico que serve como identificador da rede. O valor é `D9 B4 BE F9`, que indica a rede principal, enquanto `DA B5 BF FA` indica a testnet.
* As transações [SSL](https://en.wikipedia.org/wiki/Secure%5FSockets%5FLayer "Secure Sockets Layer") sempre começam com uma mensagem "client hello". O esquema de encapsulamento de registros usado para prefixar todos os pacotes SSL consiste em formas de cabeçalho de dois e três bytes. Normalmente, uma mensagem client hello do SSL versão 2 é prefixada com um `80`, e uma resposta de servidor SSLv3 a um client hello começa com `16` (embora isso possa variar).
* Os pacotes [DHCP](https://en.wikipedia.org/wiki/DHCP "DHCP") usam um valor de "magic cookie" de `63 82 53 63` no início da seção de opções do pacote. Esse valor é incluído em todos os tipos de pacote DHCP.
* As conexões [HTTP/2](https://en.wikipedia.org/wiki/HTTP/2 "HTTP/2") começam com a string de 24 caracteres `PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n`. Ela foi projetada para evitar o processamento de quadros por servidores e intermediários que suportam versões anteriores do HTTP, mas não a 2.0.
* O [handshake de abertura do WebSocket](https://en.wikipedia.org/wiki/WebSocket#Opening%5Fhandshake "WebSocket") usa uma string contendo o [UUIDv4](https://en.wikipedia.org/wiki/UUIDv4 "UUIDv4") `258EAFA5-E914-47DA-95CA-C5AB0DC85B11`.

### Em interfaces

Os números mágicos são comuns em [funções de API](https://en.wikipedia.org/wiki/API%5Ffunction "API function") e [interfaces](https://en.wikipedia.org/wiki/Interface%5F%28computing%29 "Interface (computing)") em muitos [sistemas operacionais](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system"), incluindo [DOS](https://en.wikipedia.org/wiki/DOS "DOS"), [Windows](https://en.wikipedia.org/wiki/Windows "Windows") e [NetWare](https://en.wikipedia.org/wiki/NetWare "NetWare"):

Exemplos

* As [BIOS](https://en.wikipedia.org/wiki/BIOS "BIOS") compatíveis com [IBM PC](https://en.wikipedia.org/wiki/IBM%5FPC "IBM PC") usam os valores mágicos `00 00` e `12 34` para decidir se o sistema deve ou não contar a memória na reinicialização, realizando assim um cold boot ou um warm boot. Esses valores também são usados pelos gerenciadores de memória [EMM386](https://en.wikipedia.org/wiki/EMM386 "EMM386") que interceptam requisições de boot. As BIOS também usam o valor mágico `55 AA` para determinar se um disco é inicializável.
* O cache de disco [SMARTDRV](https://en.wikipedia.org/wiki/SMARTDRV "SMARTDRV") do [MS-DOS](https://en.wikipedia.org/wiki/MS-DOS "MS-DOS") (codinome "Bambi") usa os valores mágicos `BA BE` e `EB AB` em funções de API.
* Muitos drivers [DR-DOS](https://en.wikipedia.org/wiki/DR-DOS "DR-DOS"), [Novell DOS](https://en.wikipedia.org/wiki/Novell%5FDOS "Novell DOS") e [OpenDOS](https://en.wikipedia.org/wiki/OpenDOS "OpenDOS") desenvolvidos no antigo _European Development Centre_ no Reino Unido usam o valor `0E DC` como token mágico ao invocar ou fornecer funcionalidades adicionais sobre as funções (emuladas) padrão do DOS, sendo o NWCACHE um exemplo.

### Outros usos

Exemplos

* O [endereço MAC](https://en.wikipedia.org/wiki/MAC%5Faddress "MAC address") padrão nos [SoCs](https://en.wikipedia.org/wiki/System%5Fon%5Fa%5Fchip "System on a chip") da Texas Instruments é `DE:AD:BE:EF:00:00`.

## GUID

É possível criar ou alterar [identificadores globalmente únicos](https://en.wikipedia.org/wiki/Globally%5Funique%5Fidentifier "Globally unique identifier") (GUIDs) de modo que sejam memoráveis, mas isso é fortemente desaconselhado, pois compromete sua robustez como identificadores quase únicos. As especificações para gerar GUIDs e UUIDs são bastante complexas, o que é justamente o que faz com que sejam praticamente únicos, se implementadas corretamente.

Os números de ID de produto do Microsoft Windows para produtos do [Microsoft Office](https://en.wikipedia.org/wiki/Microsoft%5FOffice "Microsoft Office") às vezes terminam com `0000-0000-0000000FF1CE` ("OFFICE"), como `90160000-008C-0000-0000-0000000FF1CE`, o ID de produto do "Office 16 Click-to-Run Extensibility Component".

O Java usa vários GUIDs que começam com `CAFEEFAC`.

Na [GUID Partition Table](https://en.wikipedia.org/wiki/GUID%5FPartition%5FTable "GUID Partition Table") do esquema de particionamento GPT, as [partições BIOS Boot](https://en.wikipedia.org/wiki/BIOS%5FBoot%5Fpartition "BIOS Boot partition") usam o GUID especial `21686148-6449-6E6F-744E-656564454649`, que não segue a definição de GUID; em vez disso, ele é formado usando os códigos [ASCII](https://en.wikipedia.org/wiki/ASCII "ASCII") da string `Hah!IdontNeedEFI` parcialmente em ordem [little endian](https://en.wikipedia.org/wiki/Little%5Fendian "Little endian").

## Valor de depuração

Os **valores mágicos de depuração** são valores específicos gravados na [memória](https://en.wikipedia.org/wiki/Random-access%5Fmemory "Random-access memory") durante a [alocação](https://en.wikipedia.org/wiki/Memory%5Fallocation "Memory allocation") ou desalocação, de modo que seja possível, mais tarde, dizer se eles foram ou não corrompidos, e para tornar evidente quando valores obtidos de memória não inicializada estão sendo usados. A memória normalmente é visualizada em hexadecimal, de modo que valores repetidos memoráveis ou em [hexspeak](https://en.wikipedia.org/wiki/Hexspeak "Hexspeak") são comuns. Valores numericamente ímpares podem ser preferíveis para que processadores sem endereçamento por byte gerem uma falha ao tentar usá-los como ponteiros (que devem cair em endereços pares). Devem ser escolhidos valores afastados de endereços prováveis (o código do programa, dados estáticos, dados de heap ou a pilha). De forma semelhante, eles podem ser escolhidos de modo que não sejam códigos válidos no conjunto de instruções da arquitetura em questão.

Como é muito improvável, embora possível, que um inteiro de 32 bits assuma esse valor específico, o aparecimento de tal número em um [depurador](https://en.wikipedia.org/wiki/Debugger "Debugger") ou [despejo de memória](https://en.wikipedia.org/wiki/Memory%5Fdump "Memory dump") muito provavelmente indica um erro, como um estouro de buffer ou uma [variável não inicializada](https://en.wikipedia.org/wiki/Uninitialized%5Fvariable "Uninitialized variable").

Exemplos famosos e comuns incluem:

| Código           | Descrição                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 00008123         | Usado no MS Visual C++. Ponteiros deletados são definidos com esse valor, de modo que lançam uma exceção quando usados depois; é um alias mais reconhecível para o endereço zero. É ativado com a opção Security Development Lifecycle (/sdl).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ..FACADE         | _"Facade"_, usado por diversos [RTOSes](https://en.wikipedia.org/wiki/Real-time%5Foperating%5Fsystem "Real-time operating system").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| 1BADB002         | _"1 bad boot"_, número mágico do cabeçalho [Multiboot](https://en.wikipedia.org/wiki/Multiboot%5FSpecification "Multiboot Specification").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 8BADF00D         | _"Ate bad food"_, indica que um aplicativo [iOS](https://en.wikipedia.org/wiki/IOS "IOS") da [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") foi encerrado porque ocorreu um timeout do watchdog.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| A5A5A5A5         | Usado no desenvolvimento de sistemas embarcados porque o padrão de bits alternados (1010 0101) cria um padrão facilmente reconhecível em [osciloscópios](https://en.wikipedia.org/wiki/Oscilloscope "Oscilloscope") e [analisadores lógicos](https://en.wikipedia.org/wiki/Logic%5Fanalyzer "Logic analyzer").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| A5               | Usado no [malloc(3)](https://en.wikipedia.org/wiki/Malloc "Malloc") PHK do [FreeBSD](https://en.wikipedia.org/wiki/FreeBSD "FreeBSD") para depuração quando /etc/malloc.conf é apontado por symlink para "-J", a fim de inicializar toda a memória recém-alocada, já que esse valor não é um ponteiro NULL nem um caractere NUL ASCII.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ABABABAB         | Usado pelo HeapAlloc() de depuração da [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar [bytes de guarda](https://en.wikipedia.org/wiki/Guard%5Fbyte "Guard byte") de "terra de ninguém" após a memória de heap alocada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ABADBABE         | _"A bad babe"_, usado pela [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") como o número mágico do "Boot Zero Block".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| ABBABABE         | _"[ABBA](https://en.wikipedia.org/wiki/ABBA "ABBA") babe"_, usado pelo heap de memória de _[Driver: Parallel Lines](https://en.wikipedia.org/wiki/Driver:%5FParallel%5FLines "Driver: Parallel Lines")_.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ABADCAFE         | _"A bad cafe"_, usado para inicializar toda a memória não alocada (Mungwall, [AmigaOS](https://en.wikipedia.org/wiki/AmigaOS "AmigaOS")).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| B16B00B5         | _"Big Boobs"_, antigamente exigido pelo hypervisor [Hyper-V](https://en.wikipedia.org/wiki/Hyper-V "Hyper-V") da [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para ser usado por convidados Linux como a metade superior de seu "guest id".                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| BAADF00D         | _"Bad food"_, usado pelo HeapAlloc() de depuração da [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar memória de heap alocada não inicializada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| BAAAAAAD         | _"Baaaaaad"_, indica que o log do [iOS](https://en.wikipedia.org/wiki/IOS "IOS") da [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") é um stackshot de todo o sistema, não um relatório de falha.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| BAD22222         | _"Bad too repeatedly"_, indica que um aplicativo VoIP [iOS](https://en.wikipedia.org/wiki/IOS "IOS") da [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") foi encerrado porque retomou com frequência excessiva.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| BADBADBADBAD     | _"Bad bad bad bad"_, memória "não inicializada" dos [Burroughs Large Systems](https://en.wikipedia.org/wiki/Burroughs%5FLarge%5FSystems "Burroughs Large Systems") (palavras de 48 bits).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| BADC0FFEE0DDF00D | _"Bad coffee odd food"_, usado em sistemas de 64 bits [RS/6000](https://en.wikipedia.org/wiki/RS/6000 "RS/6000") da [IBM](https://en.wikipedia.org/wiki/IBM "IBM") para indicar registradores de CPU não inicializados.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| BADDCAFE         | _"Bad cafe"_, no [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") da [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems"), marca memória de kernel não inicializada (KMEM\_UNINITIALIZED\_PATTERN).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| BBADBEEF         | _"Bad beef"_, usado no [WebKit](https://en.wikipedia.org/wiki/WebKit "WebKit"), para erros particularmente irrecuperáveis.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| BEBEBEBE         | Usado pelo [AddressSanitizer](https://en.wikipedia.org/wiki/AddressSanitizer "AddressSanitizer") para preencher memória alocada, mas não inicializada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| BEEFCACE         | _"Beef cake"_, usado pelo [Microsoft .NET](https://en.wikipedia.org/wiki/Microsoft%5F.NET "Microsoft .NET") como número mágico em arquivos de recursos.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| C00010FF         | _"Cool off"_, indica que um app [iOS](https://en.wikipedia.org/wiki/IOS "IOS") da [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") foi encerrado pelo sistema operacional em resposta a um evento térmico.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| CAFEBABE         | _"Cafe babe"_, usado pelo [Java](https://en.wikipedia.org/wiki/Java%5F%28programming%5Flanguage%29 "Java (programming language)") para arquivos de classe. Usado em binários [Mach-O](https://en.wikipedia.org/wiki/Mach-O "Mach-O") multiarquitetura.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| CAFED00D         | _"Cafe dude"_, usado pelo [Java](https://en.wikipedia.org/wiki/Java%5F%28programming%5Flanguage%29 "Java (programming language)") para sua compressão [pack200](https://en.wikipedia.org/wiki/Pack200 "Pack200").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| CAFEFEED         | _"Cafe feed"_, usado pelo kernel de depuração do [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") da [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems") para marcar memória de kmemfree().                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| CCCCCCCC         | Usado pela biblioteca de runtime de depuração C++ da [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") e por muitos ambientes DOS para marcar memória de [pilha](https://en.wikipedia.org/wiki/Stack-based%5Fmemory%5Fallocation "Stack-based memory allocation") não inicializada. CC é o opcode da interrupção de breakpoint de depuração [INT 3](https://en.wikipedia.org/wiki/INT%5F3 "INT 3") em processadores x86\.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| CDCDCDCD         | Usado pela função malloc() de depuração C/C++ da [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar memória de heap não inicializada, normalmente retornada por HeapAlloc.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 0D15EA5E         | _"Zero Disease"_, usado como flag para indicar boot normal nos consoles [GameCube](https://en.wikipedia.org/wiki/GameCube "GameCube") e [Wii](https://en.wikipedia.org/wiki/Wii "Wii").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| DDDDDDDD         | Usado pelo SmartHeap da MicroQuill e pela função free() de depuração C/C++ da Microsoft para marcar memória de heap liberada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| DEAD10CC         | _"Dead lock"_, indica que um aplicativo [iOS](https://en.wikipedia.org/wiki/IOS "IOS") da [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") foi encerrado porque manteve um recurso do sistema enquanto era executado em segundo plano.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| DEADBABE         | _"Dead babe"_, usado no início dos arquivos arena do [IRIX](https://en.wikipedia.org/wiki/IRIX "IRIX") da [Silicon Graphics](https://en.wikipedia.org/wiki/Silicon%5FGraphics "Silicon Graphics").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| DEADBEEF         | _"Dead beef"_, notoriamente usado em sistemas [IBM](https://en.wikipedia.org/wiki/IBM "IBM"), como o [RS/6000](https://en.wikipedia.org/wiki/RS/6000 "RS/6000"), também usado nos [sistemas operacionais](https://en.wikipedia.org/wiki/Operating%5Fsystem "Operating system") [Mac OS clássico](https://en.wikipedia.org/wiki/Classic%5FMac%5FOS "Classic Mac OS"), [OPENSTEP Enterprise](https://en.wikipedia.org/wiki/OPENSTEP%5FEnterprise "OPENSTEP Enterprise") e no [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga") da [Commodore](https://en.wikipedia.org/wiki/Commodore%5FInternational "Commodore International"). No [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") da [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems"), marca memória de kernel liberada (KMEM\_FREE\_PATTERN).                                                                                                                                    |
| DEADCAFE         | _"Dead cafe"_, usado pelo [Microsoft .NET](https://en.wikipedia.org/wiki/Microsoft%5F.NET "Microsoft .NET") como um número de erro em [DLLs](https://en.wikipedia.org/wiki/Dynamic-link%5Flibrary "Dynamic-link library").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| DEADC0DE         | _"Dead code"_, usado como marcador no firmware [OpenWRT](https://en.wikipedia.org/wiki/OpenWRT "OpenWRT") para indicar o início do sistema de arquivos jffs2 a ser criado no fim do firmware estático.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| DEADFA11         | _"Dead fail"_, indica que um aplicativo [iOS](https://en.wikipedia.org/wiki/IOS "IOS") da [Apple](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc.") foi encerrado à força pelo usuário.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| DEADF00D         | _"Dead food"_, usado pelo Mungwall no [Amiga](https://en.wikipedia.org/wiki/Amiga "Amiga") da [Commodore](https://en.wikipedia.org/wiki/Commodore%5FInternational "Commodore International") para marcar memória alocada, mas não inicializada.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| DEFEC8ED         | _"Defecated"_, usado para [core dumps](https://en.wikipedia.org/wiki/Core%5Fdump "Core dump") do [OpenSolaris](https://en.wikipedia.org/wiki/OpenSolaris "OpenSolaris").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| DEADDEAD         | _"Dead Dead"_ indica que o usuário iniciou deliberadamente um despejo de falha a partir do depurador de kernel ou do teclado no Microsoft Windows.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| D00D2BAD         | _"Dude, Too Bad",_ usado em falhas do Safari no macOS Big Sur.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| D00DF33D         | _"Dude feed",_ usado pela [devicetree](https://en.wikipedia.org/wiki/Devicetree "Devicetree") para marcar o início dos cabeçalhos.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| EBEBEBEB         | Do SmartHeap da MicroQuill.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| FADEDEAD         | _"Fade dead"_, aparece no fim para identificar todo script [AppleScript](https://en.wikipedia.org/wiki/AppleScript "AppleScript").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| FDFDFDFD         | Usado pela função malloc() de depuração C/C++ da [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar [bytes de guarda](https://en.wikipedia.org/wiki/Guard%5Fbyte "Guard byte") de "terra de ninguém" antes e depois da memória de heap alocada, e algumas funções Secure [C-Runtime](https://en.wikipedia.org/wiki/C%5Fstandard%5Flibrary "C standard library") de depuração implementadas pela Microsoft (p. ex. strncat\_s).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| FEE1DEAD         | _"Feel dead"_, usado pela syscall reboot() do [Linux](https://en.wikipedia.org/wiki/Linux "Linux").                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| FEEDFACE         | _"Feed face"_, visto em binários [Mach-O](https://en.wikipedia.org/wiki/Mach-O "Mach-O") na plataforma Mac OSX da [Apple Inc.](https://en.wikipedia.org/wiki/Apple%5FInc. "Apple Inc."). No [Solaris](https://en.wikipedia.org/wiki/Solaris%5F%28operating%5Fsystem%29 "Solaris (operating system)") da [Sun Microsystems](https://en.wikipedia.org/wiki/Sun%5FMicrosystems "Sun Microsystems"), marca a zona vermelha (KMEM\_REDZONE\_PATTERN). Usado pelo [VLC player](https://en.wikipedia.org/wiki/VLC%5Fplayer "VLC player") e por algumas [câmeras IP](https://en.wikipedia.org/wiki/IP%5Fcamera "IP camera") no protocolo [RTP](https://en.wikipedia.org/wiki/Real-time%5FTransport%5FProtocol "Real-time Transport Protocol")/[RTCP](https://en.wikipedia.org/wiki/RTCP "RTCP"); o VLC player envia quatro bytes na ordem da [endianness](https://en.wikipedia.org/wiki/Endianness "Endianness") do sistema. Algumas câmeras IP esperam que o player envie esse número mágico e não iniciam o stream se ele não for recebido. |
| FEEEFEEE         | _"Fee fee"_, usado pelo HeapFree() de depuração da [Microsoft](https://en.wikipedia.org/wiki/Microsoft "Microsoft") para marcar memória de heap liberada. Alguns valores internos de controle próximos também podem ter a palavra alta definida como FEEE.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |

A maioria deles tem 32 [bits](https://en.wikipedia.org/wiki/Bit "Bit") de comprimento – o [tamanho da palavra](https://en.wikipedia.org/wiki/Word%5Fsize "Word size") da maioria dos computadores de arquitetura de 32 bits.

A prevalência desses valores na tecnologia da Microsoft não é coincidência; eles são discutidos em detalhe no livro _Writing Solid Code_ de [Steve Maguire](https://en.wikipedia.org/wiki/Steve%5FMaguire "Steve Maguire"), da [Microsoft Press](https://en.wikipedia.org/wiki/Microsoft%5FPress "Microsoft Press"). Ele apresenta uma variedade de critérios para esses valores, como:

* Eles não devem ser úteis; isto é, espera-se que a maioria dos algoritmos que operam sobre eles faça algo incomum. Números como zero não atendem a esse critério.
* Eles devem ser facilmente reconhecidos pelo programador como valores inválidos no depurador.
* Em máquinas que não têm [alinhamento de bytes](https://en.wikipedia.org/wiki/Byte%5Falignment "Byte alignment"), eles devem ser [números ímpares](https://en.wikipedia.org/wiki/Odd%5Fnumber "Odd number"), de modo que desreferenciá-los como endereços cause uma exceção.
* Eles devem causar uma exceção, ou talvez até uma parada no depurador, se executados como código.

Como eram frequentemente usados para marcar áreas de memória essencialmente vazias, alguns desses termos passaram a ser usados em expressões com o sentido de "sumiu, abortou, foi descartado da memória"; p. ex. "Seu programa está DEADBEEF".
