Δημοσιεύτηκε: 20 Σεπ 2011, 21:39
από migf1
Star_Light έγραψε:
...P.S Παρακαλείται ο κύριος migf1 όποτε βρει χρόνο να ελένξει αυτά που έχω γράψει :lol: :lol:

Καλησπέρα :)

Πολύ μπλεγμένο το βρήκα το κείμενο. Το bit shifting ολισθαίνει προς τα δεξιά ή αριστερά τόσα bits του 1ου όρου της πράξης, όσα δηλώνει ο 2ος όρος (κόβοντας όσα bits βγαίνουν εκτός ορίων προς την κατεύθυνση του shifting, γεμίζοντας παράλληλα με μηδενικά bits τον χώρο που δημιουργείται στο αντίθετο άκρο).

Π.χ. το..
Κώδικας: Επιλογή όλων

10010011 >> 2

ολισθαίνει τον 1ο όρο της πράξης 2 bits προς τα δεξιά (που σημαίνει πως κόβει τα 2 τελευταία bits και προσθέτει ισάριθμα μηδενικά bits στην αρχή ) δίνοντας ως αποτέλεσμα:
Κώδικας: Επιλογή όλων

00100100


Με την ίδια λογική, αλλά ανάποδα, το ...
Κώδικας: Επιλογή όλων

10010011 << 3

ολισθαίνει τον 1ο όρο της πράξης 3 bits προς τα αριστερά (που σημαίνει πως κόβει τα 3 πρώτα bits και προσθέτει ισάριθμα μηδενικά bits στο τέλος ) δίνοντας ως αποτέλεσμα:
Κώδικας: Επιλογή όλων

10011000


Άσχετα με το bit-shifting, κάθε bit αντιστοιχεί σε μια δύναμη του 2, αλλά ανάλογα την αρχιτεκτονική της εκάστοτε πλατφόρμας μετριέται είτε από δεξιά είτε από αριστερά. Αν υποθέσουμε πως μετριέται από αριστερά προς τα δεξιά, τότε το 1ο αποτέλεσμα σε δεκαδική απεικόνιση δίνει το νούμερο...
Κώδικας: Επιλογή όλων

decimal(00100100) = 0*(2^0) + 0*(2^1) + 1*(2^2) + 0*(2^3) + 0*(2^4) + 1*(2^5) + 0*(2^6) + 0*(2^7) = 2^2 + 2^5 = 4 + 32 = 36

Κάντε εσείς τις πράξεις στο 2ο αποτέλεσμα ;)

έγραψε:P.S2 Η memset στην C που γεμίζει την μνήμη με μια τιμή και στην προκειμένη θα γεμίσει τις κενές θέσεις αυτες δηλαδη που αδειάζουν με 0!!!!

Τι σχέση έχει τώρα η memset() ωρέ :lol: :lol: (τι μανία είναι αυτή ρε συ να μπερδεύεις άσχετα πράγματα μεταξύ τους :( )

ΥΓ. Τα bit-shifts μπορούν να χρησιμοποιηθούν για γρήγορο πολλαπλασιασμό (αριστερό shift) ή διαίρεση (δεξί shift) ενός αριθμού με πολλαπλάσια του 2