Toon posts:

[VB6] Overflow bij bepaalde calculaties

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als ik in VB6 bijvoorbeeld 256 * 234 te calculeren...krijg ik een buffer overflow...bij andere sommetjes zeg 300000 * 400 krijg ik dat bijvoorbeeld niet!
Waarom krijg ik soms deze rare bufferoverflows...?!

Verwijderd

int * int = int in vb..

256 (int) * 234 (int) = 59904 en dat is te groot voor een int.

als je 'm eerst converteerd naar long gaat ie wel goed.

Verwijderd

Mijn eerste gedachte was ook zoiets, maar als de topicstarter zeker weet dat het met 256*234 ook problemen geeft is hier wel iets raars aan de hand. 256 past namelijk net niet meer in 8 bits dus zou VB het grote data type moeten nemen en geen overflow moeten geven.
Als met 256 de fout ook wordt gegeven moet mijns inziens de fout ergens anders liggen?

Verwijderd

Er is helemaal niets raars aan de hand, het past gewoon niet in 'n int (16 bits signed).

als ie 256 * 234 doet:

256 en 234 passen beide in 'n int dus het result is ook een int, 59904 pas niet in 'n int dus overflow..

als ie 300000 * 400 (Long * int=long) doet:
300000 past niet in 'n int dus vb pakt automatish een long
dus het result word ook een long ,result is 120000000 past in 'n long niets aan het handje.

Kortom als we:

Clng(256) * Clng(234) doen :

Long * Long = Long -> 59904 past prima in een long geen overflow meer *D

't enige wat je als "vaag" op zou kunnen vatten is dat het datatype van je uitkomt afhankelijk is van de datatypes die je als invoer gebruikt en niet van de grote van je uitkomst.

Verwijderd

Op dinsdag 28 mei 2002 07:23 schreef Yarvieh het volgende:
Er is helemaal niets raars aan de hand, het past gewoon niet in 'n int (16 bits signed).
Het gaat inderdaad om de 'signed'. Voor de volledigheid (mocht iemand het nog missen) een integer loopt van -32,768 t/m 32,767.

Verwijderd

clng(254) * 234 . .. dit is al voldoende.. .
Pagina: 1