Moin,
angenommen ich möchte einen Algorithmus, wie "Square-and-Multiply" schreiben, der ja auf der Bit-Zerlegung der Potenz basiert. Sagen wir einfach a^b mod p.
Die Zahl b=(b_n,...,b_0) mit b=summe(b_k2^k) liegt als Hex im Speicher. Wie lassen sich die Bit-Operationen von C nutzen, um diese Bits, ohne sie zu kennen, durchzugehen und gemäß des Algorithmus zu verwenden?
Ich würde immer die letzte Stelle der Binärdarstellung betrachten und einen Rightshift durchführen. Allerdings müsste dann das Programm wissen, dass ich hier binär durchgehe und die Zahl nicht als Charakter betrachten möchte. Bzw. einfach nur das LSB ausgeben lassen. Wie kann ich das realisieren?
Also sagen wir, wir betrachten den nachfolgenden "stümperhaften" Programmablauf Aber kürzer bekomme ich das nicht unbedingt hin.
So klappt es. Gelöst
Ich wusste nicht, dass ( b >> 1 ) & 1; so "mächtig" ist.
angenommen ich möchte einen Algorithmus, wie "Square-and-Multiply" schreiben, der ja auf der Bit-Zerlegung der Potenz basiert. Sagen wir einfach a^b mod p.
Die Zahl b=(b_n,...,b_0) mit b=summe(b_k2^k) liegt als Hex im Speicher. Wie lassen sich die Bit-Operationen von C nutzen, um diese Bits, ohne sie zu kennen, durchzugehen und gemäß des Algorithmus zu verwenden?
Ich würde immer die letzte Stelle der Binärdarstellung betrachten und einen Rightshift durchführen. Allerdings müsste dann das Programm wissen, dass ich hier binär durchgehe und die Zahl nicht als Charakter betrachten möchte. Bzw. einfach nur das LSB ausgeben lassen. Wie kann ich das realisieren?
Also sagen wir, wir betrachten den nachfolgenden "stümperhaften" Programmablauf Aber kürzer bekomme ich das nicht unbedingt hin.
Code:
#include <time.h> //für Zeitstempel und Initialisierung des Zufallsvektors
#include <stdlib.h> // Funktion rand()
#include <stdint.h> // Datentyp uint32_t
void main
{
srand(time(NULL));
uint32_t b = rand() % 17; //Größe von 17 reicht vollkommen..
do{
print( (b >> 1) & 1 );
}while( b >>= 1 );
}
So klappt es. Gelöst
Ich wusste nicht, dass ( b >> 1 ) & 1; so "mächtig" ist.
Zuletzt bearbeitet: