2 526
edições
(mv exemplo) |
|||
(5 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 3: | Linha 3: | ||
A noção de "cadeia de bits" ([[wikipedia:bit string|''bit string'']]) foi desenvolvida pela Lógica Matemática, principalmente no início dos anos 1900, e consagrada pelos trabalhos de Turing (1937) e Shannon (1948). | A noção de "cadeia de bits" ([[wikipedia:bit string|''bit string'']]) foi desenvolvida pela Lógica Matemática, principalmente no início dos anos 1900, e consagrada pelos trabalhos de Turing (1937) e Shannon (1948). | ||
Ela difere de um [[wikipedia:Natural number|número natural]] [[wikipedia:Binary number|binário]] por permitir zeros à esquerda. Por exemplo o número natural binário <code>0001001</code> é equivalente a <code>1001</code>, mas se dizemos que <code>0001001</code> é uma ''cadeia de bits'', | Ela difere de um [[wikipedia:Natural number|número natural]] [[wikipedia:Binary number|binário]] por permitir zeros à esquerda. Por exemplo o número natural binário <code>0001001</code> é equivalente a <code>1001</code>, mas se dizemos que <code>0001001</code> é uma ''cadeia de bits'', essa equivalência deixa de existir. | ||
A rigor, portanto, a cadeia de bits não pode ser | A rigor, portanto, a cadeia de bits não pode ser "promovida" a [[wikipedia:Natural number|número natural]]. Uma alternativa seria a interpretação como '''[[código natural]]''', que não afeta a integridade da cadeia. | ||
== Notação == | == Notação == | ||
Linha 23: | Linha 23: | ||
== Ordenação de cadeias de bits == | == Ordenação de cadeias de bits == | ||
A "ordem natural" da cadeia de bits é a lexicográfica, ou seja, | |||
A "ordem natural" da cadeia de bits é a [[wikipedia:Lexicographic order|lexicográfica]], ou seja, expressando uma cadeia por linha e ordenando as linhas como se fossem palavras. '''<code>0</code> vem antes de <code>1</code>''', é uma convenção arbitrária porém estável e universal. | |||
Não existe uma "convenção oficial" dos matemáticos, mas para efeitos de padronização local (neste artigo e em diversas apĺicações e implementações relevantes), podemos supor uma ordem preferível. Isso principalmente porque cadeias de bits são tipos de dados de mais baixo nível, não são munidos de muitos métodos ou operações. Em particular os bancos de dados relacionais ([[wikipedia:SQL|padrão SQL]]) que oferecem a [https://www.postgresql.org/docs/current/datatype-bit.html cadeia de bit como tipo de dados], cumprem a convenção da ordem lexicográfica. | |||
Exemplos de cadeias de "até ''k'' bits": | |||
{| | {| | ||
!k=1 !! k=2 !! k=3 !! k=4 !! k=12 | !k=1 !! k=2 !! k=3 !! k=4 !! k=12 | ||
|- | |- | ||
| | |<small>1 bit:</small> | ||
0 | 0 | ||
1 | 1 | ||
| | |<small>Até<br/>2 bits:</small> | ||
0 | 0 | ||
00 | 00 | ||
Linha 38: | Linha 43: | ||
10 | 10 | ||
11 | 11 | ||
| | |<small>Até<br/>3 bits:</small> | ||
0 | 0 | ||
00 | 00 | ||
Linha 53: | Linha 58: | ||
110 | 110 | ||
111 | 111 | ||
| | |<small>Até<br/>4 bits:</small> | ||
0 | 0 | ||
00 | 00 | ||
Linha 84: | Linha 89: | ||
1110 | 1110 | ||
1111 | 1111 | ||
| | |<small>Até 12 bits:</small> | ||
0 | 0 | ||
00 | 00 | ||
Linha 114: | Linha 119: | ||
000000001001 | 000000001001 | ||
00000000101 | 00000000101 | ||
000000001010 | |||
000000001011 | |||
0000000011 | |||
... | ... | ||
|} | |} | ||
Linha 265: | Linha 273: | ||
No computador, por tradição (ou culpa de softwares mal projetados), pode-se erroneamente forçar que uma cadeia de bits de tamanho fixo seja interpretada como um número. Com a promoção dos [[códigos naturais]] a [[wikipedia:First-class citizen|cidadões de primera classe]], esse erro pode ser evitado. | No computador, por tradição (ou culpa de softwares mal projetados), pode-se erroneamente forçar que uma cadeia de bits de tamanho fixo seja interpretada como um número. Com a promoção dos [[códigos naturais]] a [[wikipedia:First-class citizen|cidadões de primera classe]], esse erro pode ser evitado. | ||
== Problemas por ser tipo de baixo nível == | |||
A cadeia de bits é um tipo de dado de baixo nível, um típico "dado bruto". O oposto de um "cidadão de primeira classe", munido de diversos métodos, operações e conversões consistentes com outros tipos. | |||
Na Computação, principalmente em linguagens modernas e fortemente tipadas como [[wikipedia:Scala (programming language)|Scala]], é possível definir tipos consistentes num crescer de complexidade, até que se possa considerar o tipo mais complexo como [[wikipedia:First-class citizen|cidadão de primera classe]]. Na Matemática os [[wikipedia:Set theory|conjuntos]] seriam os análogos dos dados brutos. O [[wikipedia:Group theory|grupo]], bem mais sofisticado, uma espécie de "conjunto [[wikipedia:Object-oriented programming|orientado a objeto]]", seria análogo a tipo de dado de primeira classe. | |||
Uma importante convenção para cadeias de bits surgiu em 1997 com o padrão [[wikipedia:ISO/IEC 9075|ISO SQL]] (ISO/IEC 9075), mas em seguida foi cancelada com a versão [[wikipedia:SQL:2003|SQL:2003]]. A última versão do padrão a suportar cadeias de bits foi a [[wikipedia:SQL:1999|SQL:1999]]. | |||
A flexibilidade e abrangência de uso da cadeia de bit pode ser vantajosa em algumas situações, mas na maioria dos casos, tanto matemáticos como programadores precisam de um bom cardápio de métodos e operações reusáveis, para não perder tempo reinventando e para evitar que alguma decisão afete a interoperabilidade num "ecossistema" maior de tipos já bem padronizados. Nas situações onde vale o [[wikipedia:Convention over configuration|princípio da convenção sobre a configuração]], o melhor é "promover" a cadeia de bits a um cidadão de primeira classe. A AddressForAll sugere para os matemáticos a noção de [[código natural]], como substituto da cadeia de bits em tal contexto. Um pouco mais delicada, a padronização do tipo NatCode em linguagens, requer submissão e revisão mais profunda das diversas comunidades mantenedoras das linguagens. | |||
== Referências == | == Referências == |
edições