Reverse & (And)

  • C#
  • .NET (FX) 1.0–2.0

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Rikudo.

    Reverse & (And)

    Hallo,

    Ich habe meine Ausgangszahl c.
    Ich mochte c in a und b zerlegen.
    Allerdings ist die Bedingung das a & b =,c ergeben muss.
    Wie kann ich das am besten anstellen?
    Falls es mehrere Möglichkeiten gibt möchte ich zufällig eine wählen.
    C# Developer
    Learning C++
    100 & 011 = 000
    100 & 001 = 000
    wie willst du aus 000 wieder auf eine der beiden Möglichkeiten kommen, es gibt. btw. noch viel mehr. Du brauchst mindestens eine andere Variable^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Moin,

    hier gibt es halt unendlich viele Möglichkeiten.
    Angenommen Du hast die Zahl 7. Du kannst das in -2 und 9 zerlegen und dabei immer weiter in den negativen Bereich reingehen, das hört nie auf. Gibt es da ein Limit oder was sollen die Zahlen für Merkmale haben?
    Oder verstehe ich Dein Vorhaben nicht?

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Rikudo schrieb:

    Ist es überhaupt für jede Zahl möglich?

    Ja.

    Die Theorie wäre die Zahlen aufzulisten, die zwischen Int16.MinValue und Int16.MaxValue liegen und dann diese jeweils von Deiner Zahl abzuziehen. Somit erhälst Du dann einen Summanden. Also so in der Art: 7 ist Deine Zahl und er ist gerade bei 1, dann rechnet er 7 - 1 = 6. Dann kannst Du diese Zahlen einander zuordnen. Um dann Dopplungen zu vermeiden, denn laut Kommutativgesetz ist das ja gleich, musst Du halt dann nur überprüfen, ob Du einen Summanden schon als Ergebnis hast. Natürlich sind hier aber auch irrationale Zahlen inbegriffen, da musst Du halt schauen.

    Edit: Ups, Du möchtest das UND-Gatter, das habe ich jetzt erst wahrgenommen, aber da Du nichts gesagt hast, lasse ich den Post mal so stehen. Ich bin jetzt von normaler Addition ausgegangen und nicht von boolescher Algebra.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Trade“ ()

    das ändert nichts, außer dass die Anzahl der Möglichkeiten nicht ganz so groß ist.

    a + b = c
    du kannst auch bei dieser Rechnung nicht auf a und b kommen, mit dem reinen Wissen von c, es gibt mathematisch gesehen unendlich Möglichkeiten und wenn wir den Wertebereich auf Integer/Short eingrenzen sind es immer noch verdammt viele und zwar mehr als es Möglichkeiten gibt Zahlen darzustellen :D
    Es ist nicht Möglich, du brauchst mindestens zwei Variablen, oder man kann die Möglichkeiten berechnen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Da, das ist die einfachste Lösung:

    C#-Quellcode

    1. byte[] DoIt(byte number) {
    2. return new byte[] {255, number};
    3. }

    Das gibt dir ein Array mit den gewünschten Zahlen zurück.
    Mit freundlichen Grüßen,
    Thunderbolt

    Rikudo schrieb:


    Ich mochte c in a und b zerlegen.
    Allerdings ist die Bedingung das a & b =,c ergeben muss.


    Gibt ja sehr viele solcher Zerlegungen, z.b. c = 100, a = 100 b = 111, oder a = 110, b = 100. Die trivialste ist ja immer c = 101, dann a = 101, b = 111, weitere findest du, wenn du in diesem b jetzt die 1 in der mitte durch 0 ersetzt zb.
    ok an nem längeren bsp macht das vllt mehr sinn

    Quellcode

    1. c = 1110001
    2. a = 1110001
    3. b1 = 1111111
    4. b2 = 1110111
    5. b3 = 1110011

    Du kannst dann auch noch überflüssige 1en zwischen a und b flippen,
    bsp:

    Quellcode

    1. c = 1110001
    2. a = 1110001
    3. b1 = 1111111
    4. =>
    5. a2 = 1110101
    6. b2 = 1111011




    @Thunderbolt

    ja aber nur die trivialste lösung

    @jvbsl
    er meint bitweises and, nicht Addition

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Quadsoft“ ()

    @Quadsoft lese meine Beiträge, dann weißt du dass mir das Klar war und ich die Addition nur noch einmal als Beispiel genommen habe, warum es nicht mit eindeutigem Ergebnis geht...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @jvbsl

    nun, bei der addition gibt es aber wirklich unendlich viele möglichkeiten, bei AND nur endlich viele... die addition zu erwähnen bringt also nichts.. er fragt auch nicht nach "eindeutigkeit" hättest du seinen ersten post richtig gelesen

    ​Falls es mehrere Möglichkeiten gibt möchte ich zufällig eine wählen.
    Danke schonmal für die kompetenten Beitrage:)
    Bei Thjnderbolds Lösung ist jedoch immer die Ausgangszahl enthalten.
    Ich habe versucht dies auf integer anzuwenden, jedoch kommen dann falsche Ergebnisse heraus auch wenn ich die 255 durch int.maxvalue ersetze?
    C# Developer
    Learning C++
    @Quadsoft 1. Es gibt auch bei AND unendlich viele Möglichkeiten, denn unendlich / 2 ist immer noch unendlich, es gibt nur verschiedenwertige unendlichs :D
    2. Deshalb bringt es sehr wohl etwas die Addition zu erwähnen
    3. Seinen letzten Satz hab ich irgendwie aber tatsächlich erfolgreich überlesen(aber das hast du dafür bei meinen Posts sogar zweimal geschafft ;) )
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    @Rikudo
    ja seine lösung gibt halt die einfachste denkbare lösung aus..

    willst du was anderes musst du das anwenden was ich in meinem post geschrieben habe... am einfachsten kriegst ne andere zahl wenn du irgendeine null mit einer eins vertauschst (in dem paar, meine ich, siehe mein post).

    @jvbsl

    Es gibt auch bei AND unendlich viele Möglichkeiten,


    nein, c = 111111 hat zb. nur eine einzige lösung a = b = 111111
    c' = 111110 hat nur zwei lösungen a = 111110 , b = 111111 (und a mit b vertauscht) usw.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Quadsoft“ ()

    Dann hat auch + nur begrenzt viele Möglichkeiten. In einem begrenzten Zahlenraum gibt es endlich Möglichkeiten, in einem unendlichen unendlich. Unabhängig vom Operator.
    c = 111111
    a = 111111111111111111111111111
    b = 000000000000000000000111111
    usw.

    Edit: alles klar, hatte schon gedacht ich hätte irgendwas falsch verstanden^^
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „jvbsl“ ()

    @jvbsl vergiss es xD war im gedanken iwie immer dabei dass keine zahl mehr stellen als a hat... mein fehler^^

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Quadsoft“ ()

    ich denke OR.. da kann man ja nicht beliebig auffüllen von links... xD

    a = 111111 hätte dann nur alle zahlenpaare, wo an mind einer stelle eine 1 steht... was ziemlich viele sind.. aber nicht mehr..
    jetzt erstmal die Frage: Wofür?
    Ich habe Angst, dass du etwas wie eine Verschlüsselung machen willst?
    Also ich kann mir zumindest im Moment nichts sinnvolles vorstellen.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---