Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Dim foo as boolean = 16 bit

ajv [30.11.2007 22:44:44]

#

Töissä tänään hakatessani VBAn kanssa päätä seinään totesin tuon. Totuusarvon koko on 16 bittiä. Miksi? Minä kun olen tottunut, että boolean vie vain yhden bitin. Vai enkö vain osaa? :)

Metabolix [30.11.2007 23:08:56]

#

No sehän on selvää, että muistia varataan tavuina aina. Siihen en osaa vastata, miksi se on 16 bittiä, mutta C++:n bool vie yleensä tavun ja WinAPIn BOOL taas on 32-bittinen. Aina on yhden bitin käyttäminen vaatinut SetBit- ja GetBit-viritelmiä.

ajv [30.11.2007 23:28:30]

#

Hirveää muistin tuhlausta! :) täytyy tarkastaa miten siellä sulautetussa järjestelmässä tuota muistia varataan, mutta ainakin muuttujien arvot heitti häränpyllyä kun vba:n booleania yritti sinne vastaavaan muistipaikkaan tunkea. Taas pykälää viisaampi.

Edit: Tai itseasiassa tarkemmin ajatellen siellä ei edes varata muistia. Käytössä on koko ajan "kaikki" muisti ja sinne muistiavaruuteen vaan osotellaan. Ja booleanit todella ovat vain yksittäisiä bittejä tuolla avaruudessa.

Merri [01.12.2007 03:40:38]

#

VB:ssä alunperin oli vain yksi kokonaislukumuuttuja, Integer. Sitten lisättiin mukaan Boolean jossain vaiheessa, ja yhteensopivuuden vuoksi siitä tehtiin sitten samalla Integerin kokoinen. Näihin aikoihin oli vielä vanha tuttu 16-bittinen Windowsikin käytössä, joten oli "loogista", että 16-bittiä oli se luku mihin tähdättiin.

Vähän logiikkaa lukujen takana, eli tätä aihetta sivuavaa tietoa:

Boolean False = Integer 0 = &H0
Boolean True = Integer -1 = &HFFFF

Long kaikki bitit merkattuna = -1& = &HFFFFFFFF
Long 16 alinta bittiä merkattuna = 65536 = &HFFFF&

Eli huomioitavaa on se, että -1 ja -1& ovat eri asioita, samalla tavoin kuin &HFFFF ja &HFFFF& ovat eri asioita.


Joten pieni pohdittava vielä lopuksi:

MsgBox True And &HFFFF&

Mikä lieneekään vastaus? :)

ajv [02.12.2007 15:25:34]

#

Kiitos vastauksista.

Merri kirjoitti:

Eli huomioitavaa on se, että -1 ja -1& ovat eri asioita, samalla tavoin kuin &HFFFF ja &HFFFF& ovat eri asioita.

Hmm... Millä tavoin eri asioita?

Edit: &-merkki luvun lopussa kertoo, että luku on Long-tyyppinen?

Vastaus

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

Tietoa sivustosta