Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: flaite am 25.07.05 - 16:22:21

Titel: Binärarithmetik in LotusScript
Beitrag von: flaite am 25.07.05 - 16:22:21
Hi,

ich habe einen int. Der besteht ja binär aus einer Menge an 1 und 0.
Z.B. (ich spare mir in den folgenden Beispielen eine Menge führender Nullen, da ein int ja größer ist:
Dezimal -> Binär (^= hoch)
1 -> 0001 (2^0)
4 -> 0100 (2^2)
6 -> 0110 (2^2 + 2^1)
7 -> 0111 (2^2 + 2^1 + 2^0)
13->1101 (2^3 + 2^2 + 2^0)

Kann ich mit LotusScript irgendwie rausfinden, dass z.B. das 3. bit (von rechts) eines ints binär den Wert 1 hat?

Axel
Titel: Re: Binärarithmetik in LotusScript
Beitrag von: Glombi am 25.07.05 - 16:49:24
Bin$(<integer>) liefert Dir die Binärdarstellung als String zurück.

Die Abfrage sähe dann so aus:

i = 13
bstr = Bin$(13)
   
If Left$(Right$( bstr, 3), 1 ) = "1" Then
   Msgbox "Flag gesetzt"
End If


@MiddleBack gibt es leider nicht in Script, sonst könnte man das schöner schreiben.

Andreas

Titel: Re: Binärarithmetik in LotusScript
Beitrag von: umi am 25.07.05 - 16:51:49
Ja, indem du eine Bitmaske mit AND verknüpfst

Beispiel:
Code
	Dim i As Integer
	Dim mask As Integer
	
	i= 12
	mask = 4
	
	If (i And mask ) = mask Then
		Messagebox "Bit 3 war gesetzt"
	End If
Titel: Re: Binärarithmetik in LotusScript
Beitrag von: flaite am 25.07.05 - 18:46:27
Danke euch beiden. Wobei Umis Lösung für diesen spezifischen Fall wohl eleganter ist:

Funktioniert:
Code
Sub Initialize
	Dim testVar(3) As Integer
	Dim mask As Integer
	
	Dim i As Integer
	Dim exponent(3) As Integer
	
	testVar(0) = 7
	testVar(1) = 3
	testVar(2) = 9
	testVar(3) = 12
	
	exponent (0) = 2
	exponent (1) = 2
	exponent (2) = 2
	exponent(3) = 2
	
	Print "Die Bits fangen bei 0 an zu zählen. Das ganz rechte Bit von Bin$ ist Bit 0"
	
	For i = Lbound(testVar) To Ubound(testVar)
		mask = 2 ^ exponent(i)
		If (testVar(i) And mask) Then 
			Print "Bit " &Cstr(exponent(i)) & " ist in " & Cstr(testVar(i)) & " gesetzt. (Bin$=" & Bin$(testVar(i))
		Else 
			Print "Bit " & Cstr(exponent(i)) & " ist in " & Cstr(testVar(i)) & " NICHT gesetzt. (Bin$=" & Bin$(testVar(i))
		End If
		
	Next
	
	Print "Das 2. rechteste Bit von Bin$ ist Bit 1"
	Print "Das 3. rechteste Bit von Bin$ ist Bit 2"
        Print " :-) "

End Sub

Könnte ich direkt für den offenen Userberechtigungen mit LotusScript Fall anwenden. Mach ich aber später.

Gruß Axel