Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


    Tipos de dados inteiros da linguagem Delphi

    GripeBovina
    GripeBovina
    Novato
    Novato


    Mensagens : 23
    Créditos : 15

    Tipos de dados inteiros da linguagem Delphi Empty Tipos de dados inteiros da linguagem Delphi

    Mensagem por GripeBovina Sáb Dez 04, 2010 8:23 pm

    1 - Tipos inteiros

    Um tipo integer representa um sub-conjunto de números inteiros. Os tipos inteiros genéricos são Integer e Cardinal. Devemos usar estes dois tipos sempre que possível, visto que eles resultam na melhor performance para o CPU atual e o sistema operacional. Veja abaixo uma lista de tipos inteiros, suas faixas de valores e formato de armazenamento para um compilador Delphi de 32 bits.

    1.1 - Tipos inteiros genéricos para a implementação 32-bit do Delphi

    Tipo
    Faixa de valores
    Formato

    Integer
    -2147483648..2147483647
    32 bits com sinal
    Cardinal
    0..4294967295
    32 bits sem sinal

    1.2 - Tipos inteiros fundamentais

    Tipo
    Faixa de valores
    Formato

    Shortint
    -128..127 8 bits com sinal
    Smallint
    -32768..32767
    16 bits com sinal Longint -2147483648..2147483647 32 bits com sinal Int64 -2^63..2^63-1 64 bits com sinal Byte 0..255 8 bits sem sinal Word 0..65535 16 bits sem sinal Longword 0..4294967295 32 bits sem sinal
    Em geral as operações aritméticas envolvendo tipos inteiros retornam um valor do tipo Integer, o qual, em sua implementação atual é equivalente ao tipo Longint de 32 bits. As operações retornam um valor do tipo Int64 somente quando um ou mais operandos forem do tipo Int64. Assim, o trecho de código abaixo não produz o resultado esperado:

    procedure TForm3.Button2Click(Sender: TObject)*
    var
    I: Integer;
    J: Int64;
    begin
    I := High(Integer)*
    J := I + 1;
    ShowMessage(IntToSTr(J))*
    end;

    O resultado exibido será -2147483648, ou seja, houve um estouro da capacidade máxima positiva de um Integer. Mas, como J é do tipo Int64, é de se esperar que o valor fosse 2147483648. Para que isso aconteça, temos que fazer um cast em pelo menos um dos valores envolvidos para o tipo Int64. Veja:

    procedure TForm3.Button2Click(Sender: TObject)*
    var
    I: Integer;
    J: Int64;
    begin
    I := High(Integer)*
    J := Int64(I) + 1;
    ShowMessage(IntToSTr(J))*
    end;

    Agora sim, o resultado será 2147483648.

    Importante:

    Algumas rotinas padrões que aceitam argumentos Integer truncam valores Int64 para 32 bits. Contudo, as funções High(), Low(), Succ(), Pred(), Inc(), Dec(), IntToStr() e IntToHex() suportam argumentos Int64. Além disso, as funções Round(), Trunc(), StrToInt64() e StrToInt64Def() retornam valores do tipo Int64. Mas lembre-se: algumas rotinas Delphi não aceitam valores Int64 de forma alguma.

    Quando incrementamos o último valores ou decrementamos o primeiro valor em um tipo inteiro, o resultado varia entre o início e fim da faixa. Por exemplo, o tipo Shortint tem a faixa -128..127. Desta forma, depois de executarmos o código:

    procedure TForm3.Button2Click(Sender: TObject)*
    var
    I: Shortint;
    begin
    I := High(Shortint)*
    I := I + 1;
    ShowMessage(IntToStr(I))*
    end;

    O valor da variável I é -128. Se habilitarmos a diretiva range-checking do compilador, este código gerará um erro de runtime.

      Data/hora atual: Qui Nov 21, 2024 11:36 am