Code-Beispiel
Bit-Manipulationen
Lizenz: | Erster Autor: | Letzte Bearbeitung: |
k. A. | ytwinky | 24.01.2012 |
English-speaking visitors find the english version of this program here
Beim Stöbern im engl. Forum stellte ich fest, daß mein Bit-Manipulationsprogramm dringend einer
Überarbeitung bedarf. Deshalb hier die neue (deutsche) Version..
Es ist ein einfaches Programm und seine Möglichkeiten werden über die Hilfe-Funktion ausgegeben.
Ab Version 1.1 sind die Operatoren ANDALSO und ORELSE auch enthalten..
Viel Spaß beim Bitten
Gruß
ytwinky
#include "crt.bi"
#define ArgC ((*__p___argc())-1)
#ifndef False
Const False=0, True=Not False
#EndIf
#undef GoTo 'Jojo hat Recht, danke ;-))
'+-----------------------------------------------------------------------------------+
'| Header: Bestimmen der Übergabeparameter |
'| AnzeigeCheck:|Il1 sind:Alt-0124, Großes i, kleines L, Eins „ä”öüáߎę֚Üñ±ø°¸©|
Const Autor="BitWise-d.bas v1.1 ¸2012 by ytwinky, MD"' |
'| (Tastenkombination: keine) |
'| Zweck : Umrechner für die verschiedenen Zahlensystem die FreeBASIC beherrscht |
'| Getestet mit dem aktuellen fbc und dem aktuellen FBEdit |
'+-----------------------------------------------------------------------------------+
'(Anmerkung zu den Sonderzeichen: zuerst steht das DOS-Zeichen, danach das Windowszeichen)
Const Esc=!"\27", Lf=!"\n", F1=!"\255;", light=8, red=4
Function ReadKey(s As String="") As String
If s<>"" Then Print s;
s=""
Do
s=UCase(InKey)
Sleep(1)
Loop Until s<>""
Return s
End Function
Function GetVal(byVal Which As String, byVal Value As Integer) As Integer
Var w=""
Print "Neuer Wert von " &Which &":";
Input "", w
If w<>"" Then Return ValInt(w)
Return Value
End Function
Function MenuChar(byVal s As String, byVal First As Integer=1, byVal nFG As Integer=light+red)As String
Var cFG=LoWord(Color)
If First<>1 Then Print Left(s, First-1);
Color nFG
Print Chr(s[First-1]);
Color cFG
Return Mid(s, First+1)
End Function
Function ShowVar(byVal Which As Integer) As String
Var FInt=Str(Which)
FInt=String(11-Len(FInt), " ") &FInt
Return FInt &" " & Bin(Which, 32) &" " & Hex(Which, 8) &" " & Oct(Which, 12)
End Function
Var m="", n="", i=0, fun="SHR", b=18687, v=8, r=0
Cls
Print Autor &Lf &"32-Bit Integer(+|-)" &Space(18) &"Bin" &Space(18) &"Hex" &Space(7) &"Oct"
Do
For i=0 To 6
Locate 9+i, 1
Print String(79, " ") 'Eingabe löschen..
Next
Locate 3, 1' Menü aufbauen..
Print MenuChar(" Basis:", 6) &ShowVar(b)
Print MenuChar(" Wert:", 7) &ShowVar(v)
Select Case fun
Case "AND" : r=b AND v
Case "ANDALSO" : r=b ANDALSO v
Case "OR" : r=b OR v
Case "ORELSE" : r=b ORELSE v
Case "XOR" : r=b XOR v
Case "EQV" : r=b EQV v
Case "IMP" : r=b IMP v
Case "SHL" : r=b SHL v
Case "SHR" : r=b SHR v
End Select
Print " Ergebnis:" &ShowVar(r)
Print " Aktuell:Ergebnis=Basis " &fun &" Wert "
Print "Funktionen:"; MenuChar("NOT "); MenuChar("AND "); MenuChar("ANDALSO ", 3); MenuChar("OR "); MenuChar("ORELSE ", 5);
Print MenuChar("XOR ");MenuChar("EQV "); MenuChar("IMP "); MenuChar("SHL ", 3); MenuChar("SHR ", 3);
Print MenuChar("Toggle "); MenuChar("Hilfe(F1)");!"\nAuswahl(Esc beendet..): \b\b";
Do
m=ReadKey()
Loop Until Instr("BWNAOXEILRTHDS" &F1 &Esc, m)
If m=F1 Then m="F1"
Print m
Select Case m
Case "N"
Print MenuChar("Not Basis oder Not ", 5); MenuChar("Wert:");
Do
n=ReadKey()
Loop Until Instr("BW" &Esc, n)
If n="B" Then b=Not b
If n="W" Then v=Not v
Case "A" : fun="AND"
Case "D" : fun="ANDALSO"
Case "O" : fun="OR"
Case "S" : fun="ORELSE"
Case "X" : fun="XOR"
Case "E" : fun="EQV"
Case "I" : fun="IMP"
Case "R" : fun="SHR"
Case "L" : fun="SHL"
Case "T"
Input "Welches Bit in Basis umschalten?Bit-Nr.:", i
If i>=0 And i<32 Then
b Xor=2^i
Else
Print "Wissen Sie wirklich, was Sie tun?^^";
GetKey
EndIf
Case "B" : b=GetVal("Basis", b)
Case "W" : v=GetVal("Wert", v)
Case "H", "F1"
n=!"Dies ist ein einfaches Programm zum Spielen mit Bit-Operationen\n"
n &=!"Nur Basis, Wert eingeben und die gewnschte Funktion w„hlen, das war's..\n"
n &=!"Die gew„hlte Funktion wird angezeigt, wenn beide Zahlen betroffen sind.\n"
n &=!"Erlaubte (Menu-)Buchstaben sind rot, so lassen sie sich leicht erkennen..\n"
n &=!"Beachte: auch Eingaben per &H.., &B.. und &O.. sind erlaubt..\n"
n &=!"Im Eingabe-Modus: Ein Druck auf Enter „ndert nichts ;-))\n"
Print n &!"Argumente von der Befehlszeile werden nicht ausgewertet!";
GetKey
End Select
Loop Until m=Esc
End
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|