Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Suuret luvut ja bitin siirto

Milu [12.06.2022 21:16:47]

#

Hei

Voisitteko auttaa minua ongelmassa.
Pitäisi tehdä vanhaan VB6:lla tehtyyn ohjelmaan hieman muutoksia ja tuli ongelmia VB6:n käsitellessä negatiivisia ja suuria lukuja.
Myön bitin siirto oikealle tuottaa ongelmia kun pitäisi enemmän ja vähemmän merkitsevät tavut saada selvitettyä.


Tässä olisi C:llä tehty koodi joka pitäisi saada muutettua vanhalle VB6:lle

Val arvo antaa esimerkiksi virheen jos XX = 0xFF ja YY = 0xFF
XXYY koostuu kahdesta 8-bittisestä hexsa arvosta. Pienin ja suurin 16 bittinen XXYY arvo voi olla 0x0000 - 0xFFFF

Re_val = XXYY
Val = (Re_val + 0x3B8) * 0xAF04
Val_H = (Val & 0xFFFF0000) >> 16
val_L = (Val & 0xFFFF)
if (Val_L < 0xCE96)
{ WR_val = Val_H + Re_val }
else
{ WR_val = (Re_val % 0xCE96) + Val_H }

Metabolix [13.06.2022 15:10:55]

#

Kertoja 0xAF04 on jaollinen neljällä eli sisältää kaksi nollabittiä lopussa. Kun nämä jättää pois, kertolaskun tulos mahtuu 30 bittiin ja ei tule ongelmia etumerkin kanssa. Muutoksen voi kumota sitten seuraavissa maskeissa ja siirroissa. Eli kolme laskuriviä muuttuvat näin:

Val = (Re_val + 0x3B8) * (0xAF04 >> 2);
Val_H = (Val & 0x3FFFC000) >> 14;
Val_L = (Val & 0x3FFF) * 4;

Milu [13.06.2022 21:15:20]

#

Kiitos Paljon.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta