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}
/* 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.
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:
bigint.c
, contendo a implementação
das funções pedidas (e eventualmente, funções auxiliares). Esse arquivo
* não * deve conter uma função main
.
/* Nome_do_Aluno1 Matricula */ /* Nome_do_Aluno2 Matricula */