INF1018 - Software Básico - 2011.1

Primeiro Trabalho

Manipulação de inteiros grandes

O objetivo deste trabalho é construir uma biblioteca para manipulação de inteiros grandes de 128 bits. A biblioteca deverá prover as operações aritméticas básicas (somar, subtrair, multiplicar, dividir) e operações de deslocamento de bits.

A biblioteca deve ser implementada em C, usando a seguinte definição para o tipo do inteiro grande:

	
#define NUM_BYTES 16
typedef unsigned char BigInt[NUM_BYTES];

Ou seja, uma variável do tipo BigInt é representada por este array, que deve ser interpretado como um único inteiro de 128 bits, em complemento a dois, seguindo a ordem little-endian. Desta forma, o inteiro 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE (igual a -2) é representado pelo array:

{0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}

Implementação

A implementação das funções deve obedecer os protótipos a seguir:

/* Operacoes basicas */
/* res = a + b */ void bi_sum (BigInt res, BigInt a, BigInt b);
/* res = a - b */ void bi_sub (BigInt res, BigInt a, BigInt b);
/* res = a * b */ void bi_mul (BigInt res, BigInt a, BigInt b);
/* res = a / b */ void bi_div (BigInt res, BigInt a, BigInt b);

/* Operacoes de deslocamento */
/* desloca a de n bits para a direita e guarda resultado em res */ void bi_shr (BigInt res, BigInt a, int n);
/* desloca a de n bits para a esquerda e guarda resultado em res */ void bi_shl (BigInt res, BigInt a, int n);

O produto deste trabalho deve ser um arquivo em C com nome "bigint.c" contendo apenas a implementação das seis funções acima. Dê um #include no arquivo bigint.h para as prototipações.


Testando as funções

Para testar as suas funções, crie um outro arquivo, teste.c, contendo uma função main. Este arquivo também deverá incluir bigint.h.

Crie seu programa executável teste com a linha:

   gcc -Wall -o teste bigint.c teste.c

Recomendações:


Prazo: 19/04 (até a meia noite)

Os trabalhos perderão meio ponto por cada dia de atraso, incluindo dias de final de semana.

Entrega


Observações