[C/C++] Tudo sobre máscaras de dados
2 participantes
- covital
Membro VIP - Idade : 27
Posts : 2107
Créditos : 0
Respeito : 18
God damn asshole
[C/C++] Tudo sobre máscaras de dados
Ter 18 Dez 2012, 17:58
Máscara de Dados
Máscaras de dados são usadas para definir entradas e saídas de dados em C. Basicamente, ela demonstra ao programa que tipo de conversão deve ser adotado para converter os bytes armazenados em uma variável.
Por exemplo, se entrarmos com uma variável de ponto flutuante (float) que usa 4 bytes de memória, na saída, também devemos utilizar uma máscara de ponto flutuante. Se utilizarmos uma máscara de número inteiro, o algoritmo vai ler apenas os dois primeiros bytes, pois uma variável inteira tem apenas a metade dos bytes de ponto flutuante.
E além disso, variáveis int, float e double usam padrões diferentes de armazenamento. Por exemplo, se digitarmos a entrada 10, ela será convertida em bytes em int, que será convertida em bytes diferentes em float, que por sua vez, será totalmente diferente de double. Apenas char é igual int e vice-versa.
Como podemos ver, apenas int e char deram um resultado satisfatório, float resultou em algo inesperado - nada.
As máscaras
Agora que vimos para que servem as máscaras, veremos qual é a máscara de cada tipo de entrada e saída.
Alguns cuidados
O problema de usar máscaras é a ambiguidade que pode trazer ao compilador.
Por exemplo: se por acaso quisermos utilizar o símbolo %, como faremos?
Nesse caso podemos usar outros tipo de máscara.
Também podemos usar modificadores nas máscaras
Fonte: tiexpert
Máscaras de dados são usadas para definir entradas e saídas de dados em C. Basicamente, ela demonstra ao programa que tipo de conversão deve ser adotado para converter os bytes armazenados em uma variável.
Por exemplo, se entrarmos com uma variável de ponto flutuante (float) que usa 4 bytes de memória, na saída, também devemos utilizar uma máscara de ponto flutuante. Se utilizarmos uma máscara de número inteiro, o algoritmo vai ler apenas os dois primeiros bytes, pois uma variável inteira tem apenas a metade dos bytes de ponto flutuante.
E além disso, variáveis int, float e double usam padrões diferentes de armazenamento. Por exemplo, se digitarmos a entrada 10, ela será convertida em bytes em int, que será convertida em bytes diferentes em float, que por sua vez, será totalmente diferente de double. Apenas char é igual int e vice-versa.
/* EXEMPLO DO QUE PODE ACONTECER DE ERRADO EM UM PROGRAMA
Aqui declararemos uma variavel inteira valendo 65.
veja o que acontece quando mandamos imprimir o inteiro como flutuante
*/
#include <stdio.h>
int main (void)
**
int nr=65;
printf ("Este e um int\t-> %d\n", nr)*
printf ("Este e um char\t-> %c\n", nr)*
printf ("Este e um float\t-> %f\n", nr)*
return 0;
**
Como podemos ver, apenas int e char deram um resultado satisfatório, float resultou em algo inesperado - nada.
As máscaras
Agora que vimos para que servem as máscaras, veremos qual é a máscara de cada tipo de entrada e saída.
// Exemplo de mascaras e formato de seus dados
#include <stdio.h>
int main (void)
**
printf ("Mascara d\t-> %d\n", 1)*
printf ("Mascara c\t-> %c\n", 'A')*
printf ("Mascara f\t-> %f\n", 1.65)*
printf ("Mascara i\t-> %i\n", 1)*
printf ("Mascara ld\t-> %ld\n", 1)*
printf ("Mascara e\t-> %e\n", 1.65)*
printf ("Mascara o\t-> %o\n", 256)*
printf ("Mascara x\t-> %x\n", 256)*
printf ("Mascara s\t-> %s\n", "Cadeia de caracteres (string)")*
return 0;
**
Alguns cuidados
O problema de usar máscaras é a ambiguidade que pode trazer ao compilador.
Por exemplo: se por acaso quisermos utilizar o símbolo %, como faremos?
Nesse caso podemos usar outros tipo de máscara.
Também podemos usar modificadores nas máscaras
// Exemplo de modificadores de mascaras
#include <stdio.h>
int main (void)
**
printf ("Original \"%d\"\nModificado: %+d %+d\n\n", 1, 1, -1)*
printf ("Original \"%f\"\nModificado: %.1f %.3f\n\n", 1.2345, 1.2345, 1.2345)*
printf ("Original \"%o\"\nModificado: %#o\n\n", 256, 256)*
printf ("Original \"%x\"\nModificado: %#x\n", 256, 256)*
**
Fonte: tiexpert
- Koily
Coordenador - Idade : 29
Posts : 4744
Créditos : 250
Respeito : 36
Foco, força e fé.
Warning :
Re: [C/C++] Tudo sobre máscaras de dados
Ter 18 Dez 2012, 22:03
Super essencial e um ótimo tutorial! Muitos aprenderão C/C++! ;]
Permissões neste sub-fórum
Não podes responder a tópicos
|
|