[VB6/C] Rekenen met unsigned longs

Pagina: 1
Acties:

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Topicstarter
Ik ben op mijn werk bezig met het converteren van een C-applicatie naar VB6. Nou wil dat opzich willen lukken maar ik heb nu en berekening waar ik niet uit kom. In C ziet de code er ongeveer zo uit:

C:
1
2
3
4
ulong a, ad;

ad = 1696;
a = ad - 32768L;


Na uitvoer van dit stuk code heeft a de waarde 2. Hoe kan de uitkomst van deze rekensom nou 2 zijn? Ik heb beide getallen al binair uitgeschreven maar zelfs dan zie ik het niet
code:
1
2
3
4
1696   =  0000 0110 1010 0000
32768  =  1000 0000 0000 0000
          -------------------  -
2      =  0000 0000 0000 0010


Kan iemand me uitleggen hoe dit werkt? Zolang ik het niet snap ben ik ook niet in staat om een VB routine te maken die op dezelfde manier met de getallen omgaat als C dat doet.

  • The End
  • Registratie: Maart 2000
  • Laatst online: 21:22

The End

!Beginning

Ik heb het ook even geprobeerd in Visual C++ .Net, maar bij mij komt er a=4294936224 uit.

Ik heb maar even aangenomen dat ad ook een ULONG is.

  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Topicstarter
Hmm... misschien nog twee zaken die iets uit kunnen maken.

1) De originele C-applicatie is geschreven in Borland C++ versie 4.0. Die versie heb ik hier ook draaien.
2) Een debugwatch is me niet gelukt heb daarom de waarde van a naar het scherm laten printen met printf("%u", a). Misschien dat daar wel de fout in zit?

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
%u? Is toch %ul?
Overigens klopt je binary niet, 32768 is 0100 0000 0000 0000, 1696 is. Maakt niets uit, het resultaat blijft vreemd. Nou moet erbij worden gezegd dat je het type van ad niet geeft, dus wat er precies gebeurt blijft raden.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Topicstarter
The End schreef op donderdag 09 december 2004 @ 12:27:
Ik heb het ook even geprobeerd in Visual C++ .Net, maar bij mij komt er a=4294936224 uit.

Ik heb maar even aangenomen dat ad ook een ULONG is.
Ik heb eindelijk de debugger van Borland werkend onder Windows 3.11. Ik krijg nu voor a inderdaad hetzelfde getal.
MSalters schreef op donderdag 09 december 2004 @ 13:35:
%u? Is toch %ul?
Overigens klopt je binary niet, 32768 is 0100 0000 0000 0000, 1696 is. Maakt niets uit, het resultaat blijft vreemd. Nou moet erbij worden gezegd dat je het type van ad niet geeft, dus wat er precies gebeurt blijft raden.
Zeker weten dat de binary niet klopt? Heb het nog een keer geprobeerd met de calculator van Windowd, blijft toch steeds hetzelfde uit komen. Verder heb ik %u in %ul veranderd maar dat resulteert alleen in het printen van 2l ipv 2.

ad is trouwens ook een ulong.

[ Voor 5% gewijzigd door Lorn op 09-12-2004 13:45 ]