• Nenhum resultado encontrado

Roteiro de Laboratório 02 Representação Numérica, Operações Aritméticas, Overflow e Underflow. Equipe

N/A
N/A
Protected

Academic year: 2021

Share "Roteiro de Laboratório 02 Representação Numérica, Operações Aritméticas, Overflow e Underflow. Equipe"

Copied!
7
0
0

Texto

(1)

Roteiro de Laboratório 02

Representação Numérica, Operações Aritméticas, Overflow e Underflow

Equipe

Matrícula Nome

1 Objetivos

● Observar, experimentalmente, como números são representados em um sistema computacional, algumas funções aritméticas e o que é overflow e underflow.

2 Observações

● Será utilizado um programa em C para o estudo destas representações.

● A linguagem C permite que se faça operações lógicas “bit-a-bit” em números, ou seja, as operações são realizadas em cada um dos bits que compõem o número. ● As operações lógicas “bit-a-bit” só podem ser realizadas em dados dos tipos char,

int e long int. Segue abaixo os operadores “bit-a-bit”:

Operador Ação

& and

| or

^ xor

~ not

>> shift right (deslocamento de bits à direita)

<< shift left (deslocamento de bits à esquerda)

and: realiza uma operação lógica and utilizando cada um dos bits do primeiro

operando com os respectivos bits do segundo operando. Exemplo: 1010 & 1100 = 1000

(2)

operando com os respectivos bits do segundo operando. Exemplo: 1010 | 1100 = 1110

xor: realiza uma operação lógica xor utilizando cada um dos bits do primeiro

operando com os respectivos bits do segundo operando. Exemplo: 1010 ^ 1100 = 0110

not: inverte os bits de um número binário. Exemplo: ~10000 = 01111

shift right (i >> n): insere n bits à direita da representação binária de i.

Exemplo: 16 >> 3 = 2 (10000 >> 3 = 00010)

shift left (i << n): insere n bits à direita da representação binária de i. Exemplo:

2 << 3 = 16 (00010 << 3 = 10000)

● Cada tipo de dado possui um valor mínimo e um valor máximo que pode ser atribuído a este. Segue abaixo uma tabela com os valores mínimo e máximo para cada um dos tipos de dados disponíveis na linguagem C.

Tipo de Dado Bytes Valor Mínimo Valor Máximo

char 1 -127 127 unsigned char 1 0 255 signed char 1 -127 127 int 4 -2.147.483.648 2.147.483.647 unsigned int 4 0 4.294.967.295 signed int 4 -2.147.483.648 2.147.483.647 short int 2 -32.768 32.767

unsigned short int 2 0 65.535

signed short int 2 -32.768 32.767

long int 4 -2.147.483.648 2.147.483.647

unsigned long int 4 0 4.294.967.295

signed long int 4 -2.147.483.648 2.147.483.647

float 4 seis dígitos de precisão

double 8 dez dígitos de precisão

long double 10 dez dígitos de precisão

3 Procedimento

(3)

● Acrescente dois arquivos ao projeto: funcoesDeBase.c e funcoesDeBase.h. ● No arquivo funcoesDeBase.h acrescente o código abaixo:

#ifndef FUNCOESDEBASE_H_INCLUDED #define FUNCOESDEBASE_H_INCLUDED void printbits8(unsigned int x);

void printbitsFloat(float x);

#endif // FUNCOESDEBASE_H_INCLUDED

● No arquivo funcoesDeBase.c acrescente o código abaixo: #include <stdio.h>

#include "funcoesDeBase.h" void printbits8(unsigned int x) { printf("%d = ", x); int i; for(i = 7; i >= 0; i--) printf("%c", '0' + ((x >> i) & 1)); printf("\n"); } void printbitsFloat(float x) { int i; for(i = 31; i >= 0; i--)

printf("%c", '0' + (((long int)x >> i) & 1)); printf("\n");

}

● No arquivo main.c acrescente o código abaixo: #include <stdio.h> #include <stdlib.h> #include "funcoesDeBase.h" int main() { unsigned int a, b; a = 42; b = 21; printf("a = %d\n", a); printf("b = %d\n\n", b);

(4)

//Verificação das operações bit-a-bit

printf("Exemplos das operacoes bit-a-bit:\n"); printf(" a & b = %d\n", a & b);

printf(" a | b = %d\n", a | b); printf(" a ^ b = %d\n", a ^ b); printf(" ~a = %d\n", ~a); printf("a >> 2 = %d\n", a >> 2); printf("a << 2 = %d\n\n", a << 2); //Verificação de números em Base Binária

printf("Exemplos de numeros em Base Binaria:\n"); printbits8(42);

printbits8(99);

//Verificação de números em Base Hexadecimal

printf("\nExemplos de numeros em Base Hexadecimal:\n"); printf(" 92 = %x\n", 92);

printf("256 = %x\n\n", 256);

//Verificação de números em Base Octal

printf("Exemplos de numeros em Base Octal:\n"); printf("39 = %o\n", 39);

printf("45 = %o\n\n", 45); float x = 2.15625;

//Verificação de números sinalizados em Base Binária

printf("Exemplos de numeros sinalizados em Base Binaria:\n"); printbits8(21);

printbits8(-21); printbits8(145); printbits8(-145);

//Verificação de números sinalizados em Base Hexadecimal

printf("\nExemplos de numeros sinalizados em Base Hexadecimal:\n"); printf(" 421 = %x\n", 421);

printf("-421 = %x\n", -421); printf(" 256 = %x\n", 256); printf("-256 = %x\n\n", -256);

//Verificação de números em Base Octal

printf("Exemplos de numeros em Base Octal:\n"); printf(" 123 = %o\n", 123);

printf("-123 = %o\n", 123); printf(" 726 = %o\n", 726); printf("-726 = %o\n\n", 726);

//Verificação de números Reais sinalizados printf("Exemplos de numeros Reais:\n"); printf("%f = %x\n", x, (unsigned long int)x); printf("3.141592 = %x\n\n", 3.141592); int i, t, y, f, g, c, add, sub, mult, mod; float div, w, z, d, e;

(5)

y = 6;

printf("Exemplos dos Operadores Aritmeticos Basicos:\n"); add = 19 + 6;

printf("19 + 6 = %i\n", add); sub = 19 - 6;

printf("19 - 6 = %i\n", sub); mult = 19 * 6;

printf("19 * 6 = %i\n", mult); mod = 19 % 6;

printf("19 %% 6 = %i\n", mod); div = 19 / 6;

printf("19 / 6 = %f\n", div);

printf("\nExemplos dos Operadores Aritmeticos Especiais:\n"); t = 4;

printf("t valia 4. Agora, t = %d (t++)\n", t++); t = 4;

printf("t valia 4. Agora, t = %d (++t)\n", ++t); t = 4;

printf("t valia 4. Agora, t = %d (t--)\n", t--); t = 4;

printf("t valia 4. Agora, t = %d (--t)\n", --t); t = -3;

y = 2; w = 5.7; z = 8.2;

printf("\nExemplos dos Operadores Aritmeticos da biblioteca math.h:\n"); f = fabs(x); printf("f = %i\n", f); g = pow(f, y); printf("g = %i\n", g); d = floor(w); printf("d = %f\n", d); c = sqrt(w * 125); printf("c = %i\n", c); e = ceil(z); printf("e = %f\n", e);

printf("\nExemplo para mostrar overflow:\n"); for(i = 0; i <= 32; i++)

printf("2 elevado a %i = %i\n", i, (int)pow(2, i)); printf("\nExemplo para mostrar underflow:\n"); for(i = 0; i <= 32; i++)

printf("-(2 elevado a %i) = %i\n", i, (int)(-1 * pow(2, i))); printf("\n");

x = 45;

//Verifique o que ocorre quando a linha abaixo é descomentada. //x /= 0;

system("pause"); return 0;

(6)

}

● Após acrescentar todos os códigos a seus respectivos arquivos, compile o programa e execute um debug no programa. Analise o programa e descreva o que ocorre em cada um dos exemplos.

___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ 4 Exercícios

(7)

● Utilizando como base o programa fornecido, crie uma função semelhante à

printbits8, de modo a imprimir um número do tipo long int.

● Crie uma função para demonstrar o tamanho dos tipos de dados, em bytes e em bits, citados neste roteiro.

● Dê a diferença entre pré-decremento/incremento e pós-decremento/incremento. ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ● Dê as definições de: a. overflow ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ b. underflow ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________ ___________________________________________________________________________

Referências

Documentos relacionados

Entretanto não é assim que se interpreta o valor do resultado desta regra, pois a operação de subtração entre números binários exige o contexto de um sistema sinalizado

resgate de algumas passagens da história da matemática sobre esses números pode não justificar essa dificuldade, mas pode nos ajudar a compreender que, embora a

a determinidade dele [do existente para si] já não [é] ao mesmo tempo como numa relação simples consigo, já não é uma determinidade do algo existente, mas sim é posta

A adição corresponde sempre a dois tipos básicos de ação: juntar (ou reunir) ou então acrescentar, enquanto a subtração corresponde às ações de: retirar,

inteiro, meios, três partes iguais, quatro partes iguais. Fez isso com exatamente 59 cocos quando alguém disse ao catador: eu quero três quintos dos seus terços de coco e metade

[r]

Você viu situações pro- blema com enfoques variados, desde a colocação de cartazes num painel, como a organiza- ção de frutas em caixas, compras, combinações para os bilhetes

Sistemas de Representação Numérica e Operações; Representação de Números Binários em ponto fixo e em ponto flutuante; Códigos para dados não numéricos; Introdução a Detecção