# Estado (ciência da computação)

Na ciência da computação e na teoria de autômatos, o estado de um circuito lógico digital ou programa de computador é um termo técnico para todas as informações armazenadas, em um determinado ponto no tempo, para que o circuito ou programa tem acesso. A saída de um circuito digital ou programa de computador, a qualquer momento é completamente determinado pelas suas entradas atuais e seu estado.

## Estados de Circuitos Digitais

Circuitos digitais podem ser divididos em dois tipos: a lógica combinacional, cujos sinais de saída são dependentes apenas dos seus atuais sinais de entrada, e a lógica seqüencial, cujas saídas são uma função de ambas as entradas atuais e da história das entradas passadas. Na lógica seqüencial, as informações de entradas passadas são armazenadas em elementos de memória eletrônicos, tais como flip-flops e travas. Os conteúdos guardados destes elementos de memória, num determinado ponto no tempo, é referido colectivamente como "estado" do circuito e contém todas as informações sobre o passado que o circuito têm acesso.
Por exemplo, o estado de um microprocessador (chip de computador) é o conteúdo de todos os elementos de memória nele: os acumuladores, registradores, caches de dados e flags. Quando os computadores, tais como laptops, entrarem em um modo de "hibernação" para poupar energia, desligando o processador, o estado do processador é armazenado no disco rígido do computador, para que ele possa ser restaurado quando o computador sair do modo de hibernação, e o processador poder assumir as operações de onde parou.

## Estado do programa

Do mesmo modo, um programa de computador armazena dados em variáveis​​, que representam locais de armazenamento na memória do computador. O conteúdo destas posições de memória, em um determinado ponto na execução do programa, é chamado de estado do programa.
Programação imperativa é um paradigma de programação (forma de concepção de uma linguagem de programação) que descreve computação em termos de estado de programa e instruções que alteram o estado de programa. Em contraste, em linguagens de programação declarativas o programa descreve os resultados desejados, não especificando uma mudança para o estado directamente.
Uma definição mais especializada do estado é usada em alguns programas de computador que operam em série (seqüencialmente) sobre fluxos de dados, tais como analisadores, firewalls, protocolos de comunicação e programas de criptografia. Em alguns desses programas, o histórico de entradas de dados anteriores afeta o processamento da entrada atual, que significa que o programa pode ser modelado como uma máquina de estado. Estes programas são descritos como "stateful", e as variáveis ​​que contêm os valores do ciclo de processamento anterior são chamadas no estado. Em outros programas de série a saída depende apenas da entrada atual, estes são chamados de "stateless".

## Máquinas de estados finitos

A saída de um circuito seqüencial ou programa de computador, a qualquer momento, é completamente determinada pelas suas entradas atuais e estado atual. Uma vez que cada elemento de memória binária possui apenas dois estados possíveis, 0 ou 1, o número total de diferentes estados que um circuito pode assumir é finito, e fixado por meio do número de elementos de memória. Se houver N elementos binários de memória , um circuito digital pode ter no máximo 2^N estados distintos. O conceito de Estado é formalizado em um modelo matemático abstrato de computação chamado de máquina de estado finito, usado para projetar os circuitos digitais seqüenciais e programas de computador.

## Tipos de estados

Seguintes estados destacam-se:
* Estados compatíveis são estados em uma máquina de estado que não entrem em conflito para quaisquer valores de entrada. Assim, para cada entrada, os dois estados devem ter a mesma saída, e ambos os estados devem ter o mesmo sucessor (ou sucessores não especificados), ou ambos não devem mudar. Estados compatíveis são redundantes, se ocorrerem na mesma máquina estatal.
* Estados distinguíveis são estados em uma máquina de estados que têm pelo menos uma seqüência de entrada causando diferentes seqüências de saída - não importa qual é o estado inicial.
* Estados equivalentes são estados em uma máquina de estado que, para cada seqüência de entrada possível, a mesma seqüência de saída serão produzidos - não importa qual é o estado inicial.