INF1018 - Software Básico - 2012.2

Primeiro Trabalho

Manipulação de inteiros grandes

O objetivo deste trabalho é construir uma biblioteca para manipulação de inteiros grandes. A biblioteca deverá prover algumas operações aritméticas básicas (somar, subtrair, multiplicar) 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:

	
typedef unsigned char *BigInt;

Uma variável do tipo BigInt é representada por um array de bytes que deve ser interpretado como um único inteiro de N bits, em complemento a dois, seguindo a ordem little-endian. O valor de N será fornecido na inicialização da biblioteca (ver abaixo). Desta forma, o array:

{0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} representaria o inteiro 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE (igual a -2) em 128 bits.

Especificação da Biblioteca

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

/* Inicialização da biblioteca */

/* nbits sempre maior que 0 e múltiplo de 8 */
void bi_init (int nbits);

/* Criação e destruição */

/* cria novo BigInt com valor inicial val */
BigInt bi_new (int val);

/* destroi BigInt */
void bi_destroy (BigInt a);

/* Operacoes basicas */

/* a + b */
BigInt bi_sum (BigInt a, BigInt b);

/* -a */
BigInt bi_minus (BigInt a);

/* a - b */
BigInt bi_sub (BigInt a, BigInt b);

/* a * b */
BigInt bi_mul (BigInt a, BigInt b);

/* Operacoes de deslocamento */

/* desloca a de n bits para a direita */
BigInt bi_shr (BigInt a, int n);

/* desloca a de n bits para a esquerda */
BigInt bi_shl (BigInt a, int n);

O produto deste trabalho deve ser um arquivo em C com nome "bigint.c" contendo apenas a implementação das funções acima. O arquivo bigint.c deverá conter a linha

#include bigint.h

Testando as funções

Para testar as suas funções, crie um outro arquivo, teste.c, contendo uma função main. Este arquivo deverá conter a linha:
   #include "bigint.h"

Crie seu programa executável teste com a linha:

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

Recomendações:


Prazo: 24/09 (até a meia noite)

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

Entrega


Observações