XOR Gleichung aus Integer errechnen

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

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

    XOR Gleichung aus Integer errechnen

    Hallo,

    Ich bin etwas überfordert mit dieser Problemstellung und weis nicht wie ich es am besten anstellen kann dies zu lösen:

    Ich möchte mir eine Funktion schreiben welches Parameter einen Integer akzeptiert.
    Zurückgegeben werden soll ein array mit zwei integern die wenn man die erste Zahl und die Zweite mit XOR ( ^ ) verrechnet wieder die ausgangszahl ergeben sollen.
    Dabei kann die Gleichung beliebig sein. Das einzige Kriterium ist das beide Zahlen die zurückgehen werden integer sind und wenn man Zahl 1 ^ Zahl2 rechnet wieder auf den Parameter kommt.

    Beispiel:
    Wenn ich als Parameter 14 angebe soll mir z.B 9 und 7 zurückgegeben werden da 9^7 = 14 ist.

    Wie kann ich das am besten anstellen?:/
    C# Developer
    Learning C++
    Naja ich würd zuerst den parameter in 0en und 1en zerlegen -> in jweils ein int-array speichern und dann mit einer for each schleife und XOR durchgehen -> ergebnis in int array speichern -> am ende wieder zusammenfrickeln (wieder mir for each, kannste aber auch mit for i = 0 to ... machen :D) also wieder in integer konvertieren und dann ausgeben

    hoffe ich konnte helfen :D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @Rikudo Sieh Dir mal dies an:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim x1 = 9
    3. Dim x2 = 7
    4. Dim xr = &H10
    5. For i = 0 To 15
    6. Dim x3 = (x2 Or xr) Xor (x1 Or xr)
    7. If x3 <> 14 Then
    8. MessageBox.Show(String.Format("{0:X} {1:X}", (x2 Or xr), (x1 Or xr)))
    9. End If
    10. xr *= 2
    11. Next
    12. MessageBox.Show("Feddich")
    13. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Naja eigentlich ned schwer, du weißt ja welche zahl du suchst, also kannst du dir - soweit ich weiß - sicher sein, dass die aufbauenden zahlen - die, die du haben willst - einen kleineren integerwert haben. also kannst du ja mit meiner funktion die werte durchhauen und schaun, ob sie deinen wert herausgeben

    Ich hab mal das oben in pseudocode aufgeschrieben:

    C-Quellcode

    1. int getXOR(int para1, int para2){
    2. int arr1[8];
    3. int arr2[8];
    4. int retarr[8];
    5. int retVal;
    6. for (i=0;i=7;i++){
    7. arr1[i] = toBinary(para1)[i];
    8. arr2[i] = toBinary(para2)[i];
    9. retarr[i] = arr1[i] XOR arr2[i];
    10. }
    11. return toInt(retarr);
    12. }
    13. int getXOR2(int para1, int para2){
    14. int retarr[8];
    15. for (i=0;i<=7;i++){
    16. retarr[i] = toBinary(para1)[i] XOR toBinary(para2)[i];
    17. }
    18. return toInt(retarr);
    19. }
    20. //Hilfsfunktionen
    21. int[] toBinary(int param){ //param = 9
    22. int arrList[8];
    23. for (int i=0;i<=7;i++){
    24. arrList[i] = 0;
    25. arrList[i] = arrList % 2;
    26. param = param - (param \ 2); //Ganzzahldivision: param = 9-(9\2) = 9-5 = 4
    27. } //arrList {0, 0, 0, 0, 1, 0, 0, 1}
    28. return arrList
    29. }
    30. int toInt(int[] para){
    31. int retVal = 0;
    32. for (int i=0;i<=7;i++){
    33. retVal += Math.Pow(2,i) * para[i];
    34. }
    35. }


    Edit: Btw würdest du uns auch verraten wofür du das brauchst? Ich mein zwei Zahlen binär XOR-en, das ist ja noch vergleichsweise "einfach" bzw da kann man sich den Sinn noch denken. Aber warum jemand das ganze rückwärts brauchst, also ned zwei Werte rein und das XOR-Ergebnis nehmen sondern XOR-Ergebnis rein und die ausgangswerte bekommen, puh...

    Noch dazu is des so ne art 1:n beziehung, denn A XOR B ergibt genau 1 Wert, aber der XOR-Ergebniswert - meinetwegen 14 - kann ja auf mehrere verschiedene werge hergestellt werden => nicht nur 7 XOR 9 = 14, sondern auch andere.

    EDITEDIT: Hab die Funktion für toBinary hinzugefügt, falls sie wer brauchen kann :D
    toInt wird noch folgen)

    LG Radinator :D
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

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

    Radinator schrieb:

    sondern auch andere
    Z.B. 14 und 0.
    Mit den Bits aus meinem obigen Beispiel, die auch synchron kombiniert werden dürfen. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Danke für alle Antworten ihr habt mir sehr geholfen.
    Die Lösung vom ErfinderDesRades ist die simpelste, dazu kommt das ich diesen wert noch per Random beliebig wählen kann und sich somit immer andere Kombinationen ergeben:)

    @Radinator : Hintergrund: Diverse Encoding und Encryption Geschichten in einem Projekt von mir
    C# Developer
    Learning C++