Operações matemáticas com unsigned



Já sabemos que uma variável unsigned não pode ser atribuída com valores negativos. Se, numa operação matemática, tivermos um resultado menor do que zero para uma variável unsigned, no momento em que o cálculo atingir o primeiro valor negativo (-1) a operação é remetida para o maior valor do tipo do dado, de onde o programa dará continuidade aos cálculos com os valores restantes.


O exemplo a seguir usa um Label e um Timer no Form. São declaradas duas variáveis globais do tipo unsigned int, sendo que uma funcionará como base do cálculo da subtração e a outra como valor a ser subtraído. O Label ficará piscando no Form, ou melhor, o Timer fará com que o Label fique visível e depois de alguns instantes invisível, e depois visível, e depois invisível e assim sucessivamente. Ajustamos o intervalo de tempo para 500, mas você pode alterar o valor para mais ou menos, no Code Editor ou no Object Inspector. Haverá um decremento (diminuição do valor em razão de 1) do número apresentado no Label, a cada piscada. Ou seja, o primeiro valor apresentado será 10; o segundo, 9; o terceiro, 7; e assim por diante. Observe bem o que acontecerá depois que 0 (zero) for apresentado no Label, onde, equivocadamente, poderíamos estar esperando algum valor negativo:


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------

unsigned int uiBase = 9; /* declara e inicializa a variável base (observe que 
                         poderia ser uma constante)*/
unsigned int uiAcresce = 1; /* declara e inicializa a variável que será 
                            incrementada na subtração */
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

if (Label1->Visible == true) // se label estiver visivel
{
Label1->Visible=false; // Label1 ficará invisível
/* e altera-se o Caption de Label1, com o resultado da subtração, 
cada vez que ele ficar invisível*/
Label1 -> Caption =  uiBase - uiAcresce; 
/* incrementa a variável uiAcresce (ela vale 1, 
depois 2, depois 3, 4, 5, etc)*/ 
uiAcresce = uiAcresce + 1;
}
else // ou então ( se Label1 estiver invisível)
Label1->Visible=true; // Label1 ficará visível

}
//---------------------------------------------------------------------------

anterior

índice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO