Toon posts:

[ASP/VBSCript] AND operator in combinatie met 2^x

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ola,

ik heb een klein probleem. zit met het volgende.
Ik wil met de AND operator uitlezen of een bepaald getal gezet is in een variable.
bijv:

dim temp
if (1=1) then temp = temp + 2^1 '2
if (2=0) then temp = temp + 2^2 '4
if (3=3) then temp = temp + 2^3 '8
'temp = 10
if ( temp and 2^1 ) = 2^1 then response.write "nr2 zit erin"
if ( temp and 2^2 ) = 2^2 then response.write "nr4 zit erin"
if ( temp and 2^3 ) = 2^3 then response.write "nr8 zit erin"

Dit gaat goed totdat ik boven de 2^30 uitkom.
De waarde temp heeft wel de juiste waarde, maar in combinatie met de and operator magut nie. Ik krijg dan een overflow.

Heeft iemand misschien een andere oplossing ? Kzat zelf te denken om gebruik te maken van MSB of LSB, maar zie zo gauw niet hoe is dat in ASP/VBScript kan oplossen.

Alvast bedankt voor de reacties...

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Waarschijnlijk werk je met unsigned integers, en die gaan gewoon niet verder...

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • j_du_pee
  • Registratie: Maart 2000
  • Laatst online: 23-09-2024

j_du_pee

du pain, du vin, du pee

Op dinsdag 12 maart 2002 14:42 schreef Fajlajo het volgende:
if (1=1) then temp = temp + 2^1 '2
if ( temp and 2^3 ) = 2^3 then response.write "nr8 zit
ik zie toch ernstigere fouten dan jij zelf aangeeft...
1=1 is natuurlijk altijd True

en die tweede regel is mij ook niet echt duidelijk wat je wil... bedoel je niet dit te testen:

if (temp=2^3) :?
en ook dat moet makkelijker kunnen volgens mij...

kaart != map && bottel != fles
Wacht op antwoord


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op dinsdag 12 maart 2002 14:51 schreef j_du_pee het volgende:
en die tweede regel is mij ook niet echt duidelijk wat je wil... bedoel je niet dit te testen:

if (temp=2^3) :?
en ook dat moet makkelijker kunnen volgens mij...
Hij maakt hier gebruik van een bitwise and (toch?). De test die hier gebruikt wordt is een manier om te kijken of een bepaalde bit in het getal gezet is.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Op dinsdag 12 maart 2002 14:42 schreef Fajlajo het volgende:
Ola,

ik heb een klein probleem. zit met het volgende.
Ik wil met de AND operator uitlezen of een bepaald getal gezet is in een variable.
bijv:
code:
1
2
3
4
dim temp
if (1=1) then temp = temp + 2^1   '2
if (2=0) then temp = temp + 2^2   '4
if (3=3) then temp = temp + 2^3   '8
Dit vind ik al vreemd want wat er wordt uitgevoerd is:
code:
1
2
3
if true then temp = temp + 2^1
if false then temp = temp + 2^2
if true then temp = temp + 2^3

Hier komt altijd 6 uit. Waarschijnlijk bedoel je meer iets als:
code:
1
2
3
4
5
6
7
if checkbutton1.checked then temp = temp + 2^1
if checkbutton2.checked then temp = temp + 2^2
if checkbutton3.checked then temp = temp + 2^3

if (temp and 2^1) = 2^1 then response.write "checkbox1 gevinkt."
if (temp and 2^2) = 2^2 then response.write "checkbox2 gevinkt."
if (temp and 2^3) = 2^3 then response.write "checkbox2 gevinkt."

Wat jij, denk ik wilt is een enum set en deze kan helaas niet met VBScript. Waarschijnlijk wel met JavaScript.

Dat je dicht bij 2^32 zit duidt er op dat je variabele 'vol' zit al lijkt het me geen probleem om met VBScript tot 2^128 te gaan.

Array zou ook nog een optie kunnen zijn.

Jouw probleem kun je schematisch eenvoudig weergeven
code:
1
2
3
4
5
6
7
8
9
10
11
12
binair:
00000000000000000000000000000000 -> niks
00000000000000000000000000000001 -> optie 1
00000000000000000000000000000010 -> optie 2
00000000000000000000000000000100 -> ...
00000000000000000000000000001000 -> ...
00000000000000000000000000010000 -> ...
00000000000000000000000000100000 -> ...
00000000000000000000000001000100 -> Optie 3 en 7
...
10000000000000000000000000000000 -> Optie 32
11111111111111111111111111111111 -> Optie 1 tot en met 32

Als je dit alles even gaat uittellen dan kom je in totaal op: 4294967295 (vier miljard tweehonderdenvierennegentig miljoen negenhonderdenzesenzeventig duizend twee honderd en vijfennegentig) verschillende mogelijkheden.

Een array lijkt me iets makkelijker in dit geval (aangezien je zelf al spreekt over >30 bits).

Verwijderd

Topicstarter
Het gaat inderdaad om bitwise controles.
Die regels met if (1=1) zijn er om de code even wat inte korten.

Er hoort origineel te staan wat een bepaald recht is van een gebruiker. (uit een database dan) Alleen zijn er meer dan 30 rechten die gezet moeten worden.
Pagina: 1