Announcement

Collapse
No announcement yet.

Wo ist dir Unit Math

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wo ist dir Unit Math

    Hallo

    Ich möchte eine Char in seine Bits zerlegen. Dabei mache ich das folgende:<BR>
    <BR>
    zeichen % Floor(Power(2,i)<BR>
    <BR>
    i get in einer Schlaufe von 7 bis 0. Das Problem ist das die Funktionen Floor und Power nicht erkannt werden. Irgend wie fehlt mir die Datei Maht.h oder so änlich. Die Datei math.h finde ich aber Math finde ich nicht. Was muss ich machen damit ich die Funktionen Floor und Power gebrauchen kann.<BR>
    <BR>
    Gruss Renato

  • #2
    Datei Maht.h oder so änlich. Die Datei math.h finde ich

    ?????????????????

    include "math.h&quot
    Christian

    Comment


    • #3
      Hi Renato,

      ich glaube, daß ist sicher die komplizierte Art die Bits festzustellen.

      Einfacher wäre sicher: zeichen & (1<<i)

      Bye - Pete

      Comment


      • #4
        Ciao Peter<BR>
        <BR>
        Ich habe mal dein Vorschlag versucht. Ich habe eine integer Variable nach deinem Vorschlag in einen Bit-String umgewandelt. Aber so nach dem achten oder 15 Durchlauf begint es zu spinnen und gibt mehr als nur 1 und 0 aus. Kanst du mir mal ein Beispiel geben wo es funktioniert.

        Gruss Renat

        Comment


        • #5
          #include "IdGlobal.hpp"

          IntToBin

          Returns a binary string representation for an Integer value.

          function IntToBin(Value: cardinal): string;

          Parameters

          Value: cardinal

          Cardinal value to be converted.

          Returns

          String - Binary representation of the Integer value.

          Description

          IntToBin is a String function used to construct a binary representation of a 32-bit Integer value. The return value for IntToBin will contain a string of "0" or "1" characters for each of the bits in the integer Value
          Christian

          Comment


          • #6
            Hi Renato,

            <PRE>
            long l = strtoul(Edit1->Text.c_str(),NULL,10);
            AnsiString Help;

            for (int i=31;i>=0;i--)
            if (l & (1<<i))
            Help = Help + "1";
            else Help = Help + "0";
            Label1->Caption = Help;
            </PRE>

            Christian, ich kannte die Funktion IntToBin nocht nicht, kann sie bei mir aber auch nirgends finden. Die Datei IdGlobal.hpp gibts auch nicht. Habe C++Builder5 Enterprise. Ist das was Neueres ?

            Bye - Pete

            Comment


            • #7
              Dürfte aus den Indy-Komponenten sein, die waren beim BCB5 noch nicht dabei.

              Grüße Joche

              Comment


              • #8
                Könnte sein, dass das durch die Indy Komponenten hinzugefügt wurde
                Christian

                Comment


                • #9
                  Wieder mal ein Beispiel für die gute Hilfe unter CB. Was nutzen uns da die Delphi-Units.

                  Für Floor und Power mußt du math.hpp und nicht math.h einbinden. Da sind beide Funktionen definiert.

                  Für die eigentliche Problemstellung dürfte dies jedoch performanter sein:

                  Header-Datei:

                  <PRE>
                  AnsiString binary (unsigned long value, unsigned short radix, unsigned short digits);

                  inline AnsiString binaryb (unsigned char b)
                  {
                  return binary ((unsigned long) b, (unsigned short) 2, (unsigned short) 1);
                  }

                  inline AnsiString binaryw (unsigned short w)
                  {
                  return binary ((unsigned long) w, (unsigned short) 2, (unsigned short) 2);
                  }

                  inline AnsiString binaryl (unsigned long l)
                  {
                  return binary (l, (unsigned short) 2, (unsigned short) 4);
                  }

                  CPP-Datei:

                  static const char HexDigits [] = "0123456789ABCDEF";

                  AnsiString binary (unsigned long value, unsigned short radix, unsigned short digits)
                  {
                  char Buffer[136];
                  size_t len;
                  if (radix <= 1 || radix > 16)
                  radix = 16;
                  if (digits == 0 || digits > 16)
                  digits = 1;
                  {
                  unsigned short i, j;
                  for (i = radix, j = 0; i > 1; i >>= 1, ++j);
                  len = (size_t)((((unsigned long)digits << 3) + j - 1) / j);
                  }
                  char *p;
                  size_t i;
                  for (p = Buffer+len, i = len; i > 0; --i)
                  {
                  *--p = HexDigits [(unsigned)value % radix];
                  value /= radix;
                  }
                  Buffer[len] = 0;
                  return AnsiString (Buffer);
                  }
                  </PRE>

                  Der Code stammt aus unserer String-Klasse und sollte besser wieder in einer Klasse implementiert werden.

                  Ich hoffe, das hilft Dir weiter

                  Comment

                  Working...
                  X