Δημοσιεύτηκε: 20 Σεπ 2011, 19:36
Παιδιά σήμερα έπεσε το μάτι μου στις ολισθήσεις τις οποιες είχα προσπαθήσει και παλαιοτερα να καταλάβω αλλα χωρις μεγάλη επιτυχία. Σήμερα ομως αφιέρωσα ενα μισαωράκι και τις κατανοησα πληρως (νομίζω) θα παραθέσω εδω την δεξιά ολίσθηση για όποιον την προσπαθεί και δεν την έχει κατανοήσει και στο ίδιο μοτιβο κινείται και η αριστερή. Δεν θα μπω στην διαδικασία να ξαναγράψω αυτα που λένε τα βιβλια αφενος διοτι ο καθένας μπορει να τα διαβάσει και αφετέρου επειδη αυτο το ποστ αναφέρεται σε οσους οπως προανέφερα (μέσα στους οποίους άνηκα και εγω) έκαναν μια προσπάθεια να την καταλάβουν απο τον αρχικό ορισμό αλλα τίποτα... μολις διαβάσουν το συγκεκριμένο ποστ παλι θα ανήκουμε στην ίδια ομάδα αλλα αυτη τη φορα θα έχουν κατανοήσει και αυτοι την δεξιά ολίσθηση (οπως αλλωστε τωρα και εγω!!) .
Δεξιά Ολίσθηση
"Οι θέσεις που αδειάζουν , θα γεμίσουν με μηδενικά && τα μηδενικά που μετακινούνται πέραν του δεξιού τέλους (σε μια δεξιά ολίσθηση) του αριστερού τελεστέου θα χαθούν" (συμβαίνουν και τα 2 μαζι για αυτο και ο τελεστής && )
Καταρχήν εφοσον θα ασχοληθούμε με την δεξιά ολίσθηση μας ενδιαφέρει η "ροή" προς τα δεξιά αρα αυτοματα μας ενδιαφέρει το δεξιό άκρο στην ακολουθία (οχι πως το αριστερό δεν θα μας νοιάξει αλλα θα αναφερθώ σε λίγο)
Έστω οτι έχω να ολισθήσω την
προς τα δεξιά και κατα 2
τοτε ουσιαστικά ψάχνω το αποτέλεσμα αυτου =>
Τωρα εδώ ο αριστερός τελεστέος ειναι η ίδια η ακολουθία , οποιος λοιπον δεν κατάλαβε πανω πανω πως έμπλεξα ταυτόχρονα τις φράσεις "δεξιό τέλος" και "αριστερός τελεστέος" τωρα μπορει να καταλάβει τι ήθελα να πω.
Αρχικά αριθμώ θεσιακά την ακολουθία μου. (Ως προς την θέση των bit δηλαδη )
Πρίν την ολίσθηση
Υλοποίηση Ολίσθησης
Μετά δηλαδη την ολίσθηση η θέση p1 γίνεται p3 δηλαδή το bit που υπήρχε στην 0 θα αντιστοιχεί στην θέση 2 μετα την ολίσθηση
κ.ο.κ (για το συγκεκριμένο παράδειγμα) , αν σε κάποιο άλλο παράδειγμα ήθελα να ολισθήσω κατα 5 ας πουμε τοτε θα είχα
οτι η θέση p0 γίνεται p5 η θέση p1 γίνεται p6 η p2 γίνεται p7 ενω οι θέσεις {p0,p1,p2,p3,p4} γεμίζουν με μηδενικά
με πρόσθετες παρατηρήσεις ότι
1. Οι θέσεις που αδειάζουν (p0 , p1 ) θα γεμίσουν με μηδενικά.
&&
2. Τα δυαδικά που θα μετακινηθούν μετα το πέρας (απο τα δεξιά της αρχικής δυαδικής) ξεχάστε τα γιατι χάνονται.
Σύμφωνα και με τα παραπάνω λοιπον η τελική δυαδική μετα την ολίσθηση θα είναι :
Oμοίως δουλεύει και η αριστερή.
Και ενας απλοικός κώδικας που υλοποιεί τα παραπάνω.
P.S Παρακαλείται ο κύριος migf1 όποτε βρει χρόνο να ελένξει αυτά που έχω γράψει

P.S2 Η memset στην C που γεμίζει την μνήμη με μια τιμή και στην προκειμένη θα γεμίσει τις κενές θέσεις αυτες δηλαδη που αδειάζουν με 0!!!!
Δεξιά Ολίσθηση
"Οι θέσεις που αδειάζουν , θα γεμίσουν με μηδενικά && τα μηδενικά που μετακινούνται πέραν του δεξιού τέλους (σε μια δεξιά ολίσθηση) του αριστερού τελεστέου θα χαθούν" (συμβαίνουν και τα 2 μαζι για αυτο και ο τελεστής && )
Καταρχήν εφοσον θα ασχοληθούμε με την δεξιά ολίσθηση μας ενδιαφέρει η "ροή" προς τα δεξιά αρα αυτοματα μας ενδιαφέρει το δεξιό άκρο στην ακολουθία (οχι πως το αριστερό δεν θα μας νοιάξει αλλα θα αναφερθώ σε λίγο)
Έστω οτι έχω να ολισθήσω την
- Κώδικας: Επιλογή όλων
10001010
προς τα δεξιά και κατα 2
τοτε ουσιαστικά ψάχνω το αποτέλεσμα αυτου =>
- Κώδικας: Επιλογή όλων
10001010 >> 2
Τωρα εδώ ο αριστερός τελεστέος ειναι η ίδια η ακολουθία , οποιος λοιπον δεν κατάλαβε πανω πανω πως έμπλεξα ταυτόχρονα τις φράσεις "δεξιό τέλος" και "αριστερός τελεστέος" τωρα μπορει να καταλάβει τι ήθελα να πω.
Αρχικά αριθμώ θεσιακά την ακολουθία μου. (Ως προς την θέση των bit δηλαδη )
Πρίν την ολίσθηση
- Κώδικας: Επιλογή όλων
1 0 0 0 1 0 1 0
p0 p1 p2 p3 p4 p5 p6 p7
// pn => position n οπου n = 1,2,3 ....
Υλοποίηση Ολίσθησης
- Κώδικας: Επιλογή όλων
p0 -> p2
p1 -> p3
p2 -> p4
p3 -> p5
p4-> p6
p5-> p7
Μετά δηλαδη την ολίσθηση η θέση p1 γίνεται p3 δηλαδή το bit που υπήρχε στην 0 θα αντιστοιχεί στην θέση 2 μετα την ολίσθηση
κ.ο.κ (για το συγκεκριμένο παράδειγμα) , αν σε κάποιο άλλο παράδειγμα ήθελα να ολισθήσω κατα 5 ας πουμε τοτε θα είχα
οτι η θέση p0 γίνεται p5 η θέση p1 γίνεται p6 η p2 γίνεται p7 ενω οι θέσεις {p0,p1,p2,p3,p4} γεμίζουν με μηδενικά
με πρόσθετες παρατηρήσεις ότι
1. Οι θέσεις που αδειάζουν (p0 , p1 ) θα γεμίσουν με μηδενικά.
&&
2. Τα δυαδικά που θα μετακινηθούν μετα το πέρας (απο τα δεξιά της αρχικής δυαδικής) ξεχάστε τα γιατι χάνονται.
Σύμφωνα και με τα παραπάνω λοιπον η τελική δυαδική μετα την ολίσθηση θα είναι :
- Κώδικας: Επιλογή όλων
0 0 1 0 0 0 1 0
p0 p1 p2 p3 p4 p5 p6 p7
Oμοίως δουλεύει και η αριστερή.
Και ενας απλοικός κώδικας που υλοποιεί τα παραπάνω.
Spoiler: show
P.S Παρακαλείται ο κύριος migf1 όποτε βρει χρόνο να ελένξει αυτά που έχω γράψει
P.S2 Η memset στην C που γεμίζει την μνήμη με μια τιμή και στην προκειμένη θα γεμίσει τις κενές θέσεις αυτες δηλαδη που αδειάζουν με 0!!!!