Avatar billede joergen_vinther Nybegynder
08. juli 2006 - 10:55 Der er 4 kommentarer og
1 løsning

Long Overflow ved lille værdi.

Kan nogen give mig forklaringen på nedenstående mystik?

Private Sub Form_Load()
  Dim Sum As Long
 
1  Sum = 2000000000
  MsgBox Sum        'MsgBox skriver:"2000000000". OK.
 
2  Sum = 2 * 16383   
  MsgBox Sum        'MsgBox Skriver:"32766". Ok

 
3  Sum = 2 * 16384  'VB Melder:"Error 6: Overflow".
  MsgBox Sum
End Sub

Ad. 1, Sum tildeles værdien 2 Mia. Virker fint.

Ad. 2, Sum tildeles 2 * 16383. Virker fint.

Ad. 3, Sum tildeles 2 * 16384. VB melder Overflow.
2 * 16384 er 32768, altså 1 mere end en integer kan rumme.
Hvorfor opfører en Long-Variabel sig som en Integer når den tildeles en beregning?
Avatar billede Slettet bruger
08. juli 2006 - 11:12 #1
Fordi VB læser 2 og 16384 som integers og derfor er der en overflow inden den overhovedet kommer til at skulle konverterer op til en long. Måde at gøre det på er at give type identifikation i forbindelse med dine literaler. Sådan her skulle meget gerne fungerer:

Dim Sum As Long

Sum = 2L * 16384L
Avatar billede joergen_vinther Nybegynder
08. juli 2006 - 14:50 #2
Hej kryptos. Har prøvet at skrive, som du anbefaler. VB Markerer det første L, og Melder: "Expectet end of statement.
Avatar billede Slettet bruger
08. juli 2006 - 15:43 #3
Sorry, sikker .Net syntax men for en enkelt test :

Sum = clng(2) * clng(16384)
Avatar billede joergen_vinther Nybegynder
08. juli 2006 - 15:53 #4
Meget bedre. Tak for deltagelse. kryptos får sine point.
Avatar billede arne_v Ekspert
08. juli 2006 - 17:39 #5
Sum = 2& * 16384&
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester