1 pontos por GN⁺ 2 시간 전 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Ao dividir o ASCII em 7 bits entre os 2 bits mais altos (grupo) e os 5 bits mais baixos (valor) e organizá-lo em uma tabela de 4 colunas, a relação entre caracteres de controle e caracteres imprimíveis fica imediatamente evidente
  • A tecla CTRL funciona zerando os bits mais altos do caractere digitado, gerando um caractere de controle (control character) que compartilha os mesmos 5 bits mais baixos
  • Por exemplo, ao pressionar CTRL em [(10 11011), ele se torna ESC(00 11011), o que pode ser explicado por uma operação AND de bits
  • A mesma estrutura explica por que ^J é quebra de linha, ^H é backspace e ^I é tab, assim como a exibição de ^M (CR) em arquivos de texto do Windows
  • Tabelas ASCII convencionais escondem esse padrão, mas dividir em colunas de 32 caracteres deixa clara a intenção do design

A descoberta da tabela ASCII em 4 colunas

  • O usuário soneil, do Hacker News, publicou uma versão da tabela ASCII organizada em 4 colunas de 32 itens
  • Com essa disposição, fica imediatamente visível que a conversão entre maiúsculas e minúsculas difere por um único bit, e que o alfabeto corresponde a 40h + valor de ordem (nas minúsculas, 60h)
  • Também dá para ver de imediato nessa tabela por que ^\[ é ESC

Estrutura da codificação ASCII de 7 bits

  • ASCII é uma codificação de 7 bits, em que os 2 primeiros bits indicam 4 grupos e os 5 últimos representam 32 valores
    • Grupo 00: caracteres de controle (NUL, SOH, STX, ESC etc.)
    • Grupo 01: caracteres especiais e números (Spc, !, ", # etc.)
    • Grupo 10: alfabeto maiúsculo (@, A, B, C etc.)
    • Grupo 11: alfabeto minúsculo (`, a, b, c etc.)
  • Os caracteres na mesma linha compartilham os mesmos 5 bits mais baixos, mudando apenas os bits do grupo

Tabela ASCII em 4 colunas

Bits 00 (controle) 01 (especial/números) 10 (maiúsculas) 11 (minúsculas)
00000 NUL Spc @ `
00001 SOH ! A a
00010 STX " B b
00011 ETX # C c
00100 EOT $ D d
00101 ENQ % E e
00110 ACK & F f
00111 BEL ' G g
01000 BS ( H h
01001 TAB ) I i
01010 LF * J j
01011 VT + K k
01100 FF , L l
01101 CR - M m
01110 SO . N n
01111 SI / O o
10000 DLE 0 P p
10001 DC1 1 Q q
10010 DC2 2 R r
10011 DC3 3 S s
10100 DC4 4 T t
10101 NAK 5 U u
10110 SYN 6 V v
10111 ETB 7 W w
11000 CAN 8 X x
11001 EM 9 Y y
11010 SUB : Z z
11011 ESC ; [ {
11100 FS < \ |
11101 GS = ] }
11110 RS > ^ ~
11111 US ? _ DEL

Como a tecla CTRL funciona

  • Ao pressionar CTRL, os bits mais altos do caractere digitado são definidos como 0, movendo-o para o grupo de caracteres de controle (00)
  • Isso pode ser expresso como uma operação AND de bits:
    • 10 11011([) AND 00 11111(CTRL) = 00 11011(ESC)
  • Portanto, o fato de CTRL+[ gerar ESC não é uma atribuição arbitrária, mas um design baseado em operação de bits

Exemplos práticos

  • ^J(CTRL+J) é LF (quebra de linha), ^H(CTRL+H) é BS (backspace) e ^I(CTRL+I) é TAB
  • Ao inspecionar um arquivo de texto do Windows com cat -A, aparece ^M, porque a quebra de linha do Windows usa o formato CR+LF
  • O fato de usuários do vim usarem CTRL+[ no terminal no lugar de ESC também vem dessa estrutura de bits

Ainda não há comentários.

Ainda não há comentários.