Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

Code-Beispiel

Code-Beispiele » Mathematik

Bit-Manipulationen

Lizenz:Erster Autor:Letzte Bearbeitung:
k. A.Redakteurytwinky 24.01.2012

English-speaking visitors find the english version of this program Externer Link!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 gewnschte 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
  • Das Code-Beispiel wurde am 22.01.2012 von Redakteurytwinky angelegt.
  • Die aktuellste Version wurde am 24.01.2012 von Redakteurytwinky gespeichert.
  Bearbeiten Bearbeiten  

  Versionen Versionen