Fórum bug muito estranho conversao de integer em delphi 7 e 2009 #370530
17/05/2009
0
peguei recentemente em um programa meu a exception de integer overflow.
Eu estava tentando pegar o milissegundo do dia e convertendo para negativo, porque etinha a necesidade de um numero negativo decrescente. Ao invez disso eu estava recebendo um numero positivo pra lá dos 4 bilhoes.
e compilando no delphi 7 e no delphi 2009 encontrei diferenças.
Abaixo vai o código que causa o bug:
[b:5a5a05eb9c]delphi 7[/b:5a5a05eb9c]
[b:5a5a05eb9c]delphi 2009[/b:5a5a05eb9c]
conclusão: estou fazendo algo errado e era pra ser assim mesmo, ou é um bug?
está me parecendo que dependendo de como eu uso os parenteses e o operador ele está considerando o mili como longword, que é um integer gigante unsigned, e não converte para integer, mesmo eu aplicando o sinal de negativo. E se eu tento ele pega o limite superior do longword. Isso nos dois delphis. Mas parece que no delphi 2009 ele converte o longword pra integere se eu negativar, mas no caso -1*mili, no delphi 2009, ele está considerando o operador de multiplicação como precedendo a negativação do 1 ?
Eu estava tentando pegar o milissegundo do dia e convertendo para negativo, porque etinha a necesidade de um numero negativo decrescente. Ao invez disso eu estava recebendo um numero positivo pra lá dos 4 bilhoes.
e compilando no delphi 7 e no delphi 2009 encontrei diferenças.
Abaixo vai o código que causa o bug:
[b:5a5a05eb9c]delphi 7[/b:5a5a05eb9c]
procedure TForm1.Button1Click(Sender: TObject); var mili: LongWord; begin mili := MilliSecondOfTheDay(now); //muuuuuito estranho: NO DELPHI 7 ShowMessage(IntToStr(mili)); //isso retorna o positivo corretamente ShowMessage(IntToStr(-mili)); //isso não retorna negativo, mas retorna um positivo exageradamente enorme ShowMessage(IntToStr(-1*mili)); //isso tambem não retorna negativo, mas retorna um positivo exageradamente enorme ShowMessage(IntToStr((-1)*mili)); //isso retorna o negativo corretamente end;
[b:5a5a05eb9c]delphi 2009[/b:5a5a05eb9c]
procedure TForm1.Button1Click(Sender: TObject); var mili: LongWord; begin mili := MilliSecondOfTheDay(now); //muuuuuito estranho: NO DELPHI 2009 ShowMessage(IntToStr(mili)); //isso retorna o positivo corretamente ShowMessage(IntToStr(-mili)); //ISSO DÁ CERTO, MOSTRA NEGATIVO COMO DEVERIA SER ShowMessage(IntToStr(-1*mili)); //isso não retorna negativo, mas retorna um positivo exageradamente enorme ShowMessage(IntToStr((-1)*mili)); //isso retorna o negativo corretamente end;
conclusão: estou fazendo algo errado e era pra ser assim mesmo, ou é um bug?
está me parecendo que dependendo de como eu uso os parenteses e o operador ele está considerando o mili como longword, que é um integer gigante unsigned, e não converte para integer, mesmo eu aplicando o sinal de negativo. E se eu tento ele pega o limite superior do longword. Isso nos dois delphis. Mas parece que no delphi 2009 ele converte o longword pra integere se eu negativar, mas no caso -1*mili, no delphi 2009, ele está considerando o operador de multiplicação como precedendo a negativação do 1 ?
Vitor Rubio
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)