Και τώρα κάτι διαφορετικό για τις μέρες καραντίνας. Τι κάνει ο παρακάτω κώδικας ;
int wtf(int a, int b) {
int sum = 0;
while (a != 0) {
if ((a & 1) != 0)
sum += b;
b = ( b << 1);
a = ( a >> 1);
}
return sum;
}
Για την λύση θα πρέπει να σκεφτείς σαν μια CPU και με 0 και 1.
Η πράξη (b << 1)
κάνει ολίσθηση bit και η πράξη (a & 1)
είναι το δυαδικό KAI/AND. Η γλώσσα είναι η C
αλλά πιστεύω μπορείς να βγάλεις άκρη και χωρίς την γνώση της γλώσσας.
- Τι κάνει ο κώδικάς;
- Δουλεύει με μηδενικούς αριθμούς;
- Δουλεύει με αρνητικούς αριθμούς;
Αν βρείτε τις απαντήσεις ή ξέρετε τον αλγόριθμο πείτε την λύση με προσωπικό μήνυμα το οποίο θα δημοσιευτεί εδώ κάποια στιγμή, αν έχει δημοσιευτεί ήδη μην στείλετε PM. Ερωτήσεις και διευκρινήσεις εδώ δημόσια. Δεκτές και υλοποιήσεις σε άλλες γλώσσες.
Βοηθάει να μετατρέψεις δυο αριθμούς σε δυαδικό σύστημα στα 8bit και να τρέξεις τον αλγόριθμό στο χαρτί
Για όσους θέλουν να δουν τον κώδικα σε ένα πλήρες πρόγραμμα
Μην τρέξετε το πρόγραμμα πριν προσπαθήσετε στο χαρτί
#include <stdio.h>
int main() {
int a= 42;
int b = 11;
int sum = 0;
while (a != 0) {
if ((a & 1) != 0)
sum += b;
b = ( b << 1);
a = ( a >> 1);
}
printf("sum: %d\n", sum);
}