INF1018 - Software Básico

2a Lista de Exercícios - Parte 2

  1. Mostre byte a byte como cada uma das estruturas abaixo é representada na memória, assumindo uma máquina com a arquitetura que temos visto no laboratório (int de 4 bytes, little-endian, alinhamento "usual"). Mostre o valor de cada byte em hexa-decimal.
    1. union {
        signed char a[9];
        int i;
      } x = {'a', 'b', 'A', '\n', 0, '\0', '0', -10, -100};
      
    2. struct {
        float a;
        double b;
        float c;
      } y = {1.5, -9.34, 23};
      
    3. struct {
        char c;
        int a, b;
        double d;
      } z = {20, -200, 1024, -45.25};
      

  2. Escreva pequenos programas em C para conferir todas as respostas do exercício anterior.

  3. Escreva as funções abaixo utilizando a linguagem C, mas sem utilizar as operações de ponto flutuante. As funções devem operar diretamente sobre as representações binárias dos números.
    1. Uma função para verificar se um número float é zero ou não.
      Cabeçalho: int zero (float a);
    2. Uma função para verificar se um número float está representando NaN (Not A Number) ou não.
      Cabeçalho: int NaN (float a);
    3. Uma função para comparar dois números float. A função deve retornar -1, 0, ou 1 dependendo do primeiro número ser menor, igual, ou maior que o segundo.
      Cabeçalho: int compara (float a, float b);
    4. Uma função para converter um número no formato double para o formato int.
      Cabeçalho: int to_int (double a);
    5. Uma função para converter um número no formato int para o formato double.
      Cabeçalho: double to_double (int a);
    6. Uma função para somar dois números float.
      Cabeçalho: float soma (float a, float b);