Valor

O que é um Valor em um Computador?

Valor (em Inglês: value) é um conceito de programação de computadores referente ao significado de uma estrutura de dados em um computador. Toda estrutura de dados, que existe no computador como bits e bytes, compõe um ou mais valores. Em outras palavras, os bits e bytes representam um ou mais valores, e o tipo de estrutura determina as regras para derivar o valor dos bits. Com isso, a mesma sequência de bits representa valores diferentes em diferentes estruturas, e o mesmo valor pode ser codificado como sequências diferentes em diferentes estruturas. Como isso é algo bem complicado, precisaremos de exemplos para entender isso melhor.

Por exemplo, a sequência de bits 11100111 são apenas bits até soubermos qual a estrutura de dados para derivarmos um significado (um valor) desses bits.

No caso da estrutura de um número de 8 bits inteiro não-negativo, também conhecida como uchar, ubyte, ou uint8_t (unsigned integer 8 bits type), 11100111 representa o valor numérico 231 em decimal (ou simplesmente 11100111(2) em binário). Em outras palavras, quando o número 231 é salvo usando esta estrutura, ele é tornado na sequência de bits 11100111. Seja ele salvo na memória RAM temporariamente, ou no disco rígido como um arquivo ou parte de um arquivo, a sequência de bits seria a mesma.

Nota: signed ("assinalado") em Inglês refer a possuir um sign ("sinal"), no caso o sinal de mais (+) e menos (-) antes do número.

No caso da estrutura de um número de 8 bits inteiro que pode ser negativo, também conhecida como char, byte, ou int8_t, o que 11100111 representa muda. Isso por que o fato do número ser positivo ou negativo precisa ser gravado em algum desses 8 bits. Se o primeiro bit significar que o número é negativo quando ele for 1, então 11100111 é um número negativo, já que começa com o bit 1. O valor desse número seria exatamente -27(10)+1100111(2) que equivale a -128+103, ou -25.

No caso de uma estrutura que armazena não números, mas sim texto, qual caractere (character) os bits representam depende da codificação de texto. A codificação ASCII padrão só possui 7 bits, logo não é possível que nossos 8 bits sejam ASCII. Na codificação ASCII estendida de 8 bits proprietária do Windows, conhecida como ANSI ou Windows-1252, 11100111 equivale ao cê cedilha minúsculo ç. Na codificação UTF-8, que é o padrão moderno internacional, também seria o mesmo cê cedilha.

No caso de uma estrutura que armazena imagens em pixels, a única imagem que faria sentido ter apenas 8 bits de tamanho total é uma imagem de 1 pixel de altura por 1 pixel de largura, ou seja, 1 pixel ao todo, com 8 bits por pixel de profundidade, sem paleta de cores, o que poderia ser uma imagem monocromática onde o valor de cada pixel representa a luminosidade do pixel em uma escala de preto a branco. Nesse caso, considerando que o valor numérico não-negativo é de 231, e 8 bits vão de 0 a 255, podemos dividir esse valor numérico pelo máximo para obter a posição da cor na escola de preto a branco. 231/255 equivale a 0.905~. Ou seja, seria 90.5% na escala, ou quase branco, um cinza bem claro.

A mesma cor cinza clara salva usando uma estrutura RGB de 24 bpp teria seu valor representado pelos bits 11100111 11100111 11100111, que é a mesma sequência de 8 bits três vezes, uma vês para cada canal de cor.

Um último exemplo interessante. Suponha que temos um jogo como de tabuleiro, como damas ou xadrez, em que peças são movidas em uma grade cheia de quadradinhos. Se uma peça estiver no meio do tabuleiro, ela pode ser movida para qualquer um dos oito quadrados adjacentes: para frente, para trás, para esquerda, para direita, e nas 4 diagonais. Porém, algumas peças só podem ser movidas em algumas direções, e peças não podem mover para casas que já estão ocupadas por outras peças. É possível codificar essa informação usando 8 bits, 1 bit para cada direção. Por exemplo, 11100111 poderia significar que a direção frente-esquerda, frente-meio, e frente-direita (os três primeiros bits) estão livres (1) e a peça pode mover para essas direções. Continuando em sentido horário: direita e para-trás-direita (00) estariam bloqueadas, enquanto para-trás-meio, para-trás-esquerda, e esquerda (111) estão livres. Assim como 6 bits da sequência são 1, haveriam 6 direções paras quais a peça pode se mover. Esse tipo de estrutura onde cada bit possui um significado é chamado de bit field ("campo de bits") onde cada bit positivo (1) é chamado de um bit flag ("bandeira de bit").

Com isso podemos ver que a mesma sequência de bits 11100111 em um computador pode ter diversos valores (231, -25, 90.5%, cinza claro, 6 direções de 8, etc.) dependendo de qual método é usado para interpretar esses bits.

Em geral, o computador não tem conhecimento de qual a estrutura dos bits que ele tem em sua memória ou no disco rígido. Quem tem conhecimento disso é o programa processando os bits, e geralmente o programa simplesmente assume que os dados estarão na mesma estrutura em que ele os criou. Por exemplo, suponha que um programa salve 1 número e 2 caracteres em um arquivo, então esse arquivo tem 3 bytes de tamanho. Da próxima vez que ele for abrir o arquivo, o programa espera que existam 1 número e 2 caracteres no arquivo, pois foi isso que ele salvou no arquivo. E ele espera que valores estejam na mesma ordem que ele os salvou. Se a ordem e o tipo forem constantes, não mudarem, não é necessário marcar quais bits são de qual tipo de valor, pois a posição dos bits é suficiente para inferir isso, e.g. o primeiro byte será um número, enquanto o segundo e o terceiro serão caracteres.

Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *