BETA

Μαθαίνοντας την Java-BITWISE & BIT SHIFT OPERATORS [μάθημα 16]

Εικόνα Michail

Συνεχίζουμε τα μαθήματα εκμάθησης της Java, έχοντας ήδη κάνει το πρώτο εισαγωγικό μάθημα και έχοντας δει,πως μπορούμε να εγκαταστήσουμε το NetBeans, προκειμένου να δημιουργήσουμε τις εφαρμογές μας και στη συνέχεια δημιουργώντας την πρώτη μας εφαρμογή.
Έχοντας δει κιόλας, σχετικά με τα LANGUAGE FUNDAMENTALS και στη συνέχεια, Ονομασία Μεταβλητών, και τα INTEGER TYPES, καθώς και τα Floating Point Types, μα και καθορισμό των Boolean και Char Data types, καθώς και για τα Arrays και την εισαγωγή δεδομένων μέσω κλάσης Scanner και την JOptionPane CLASS, όπως και τα Big Numbers και ASSIGNMENT-ARITHMETIC-και UNARY OPERATORS, μα και σχετικά με EQUALITY, RELATIONAL, AND CONDITIONAL OPERATORS, συνεχίζουμε με το 16ο μάθημα της σειράς.
[box color=blue]Σε αυτή την φάση για τα εκπαιδευτικά μαθήματα χρησιμοποιούμε το λειτουργικό σύστημα Windows, μα οι διαφορές είναι ελάχιστες, ως μηδαμινές και στα υπόλοιπα λειτουργικά[/box]
Όταν δουλεύουμε με οποιοδήποτε από τα είδη των integer έχουμε διαθέσιμους τελεστές (bitwise και bit shift) που μπορούν να δουλέψουν άμεσα με τα bits από τα οποία αποτελούνται οι integer αριθμοί. Οπότε μπορούμε να διαχειριστούμε integer αριθμούς στο επίπεδο των bits χρησιμοποιώντας τελεστές όπως & (and), | (or), ^ (xor), ~ (not). Αυτοί οι τελεστές χρησιμοποιούνται πολύ σπάνια σε εταιρικές εφαρμογές, βρίσκουν όμως μεγάλη απήχηση στον προγραμματισμό ψηφιακών μικροσυσκευών όπου η γλώσσα προγραμματισμού java εφαρμόζεται με μεγάλη επιτυχία.
Θα δώσουμε όμως μερικά παραδείγματα για να καταλάβετε την εφαρμογή τους.

Για να μην ξεφεύγουμε από τον βασικό σκελετό της ύλης, σας υπενθυμίζω ότι βρισκόμαστε στην κατηγορία Bitwise and Bit Shift Operators από το επίσημο site της Oracle.
ια αρχή ας βεβαιωθούμε ότι καταλαβαίνουμε την έννοια του bit. Σαν bit ορίζουμε το 0 ή το 1 για αυτό και το αριθμητικό σύστημα που χρησιμοποιεί δύο μόνο ψηφία για να περιγράψει οποιοδήποτε αριθμό ονομάζεται δυαδικό. Οποιαδήποτε πληροφορία που γράφεται ή διαβάζεται από έναν υπολογιστή είναι συνδυασμός αρκετών χιλιάδων ή ακόμα εκατομμυρίων bits.
Συνήθως η java θα χρησιμοποιήσει τέτοιου είδους προγραμματισμό όταν εφαρμοστεί σε ψηφιακές συσκευές.

Αναφέραμε προηγουμένως ότι υπάρχουν τελεστές που πράττουν ορισμένες ενέργειες επάνω στα bits. Ένας από αυτούς είναι ο unary bitwise complement operator ( ~ ) ο οποίος αντιστρέφει την τιμή ενός ψηφίου, δηλαδή μετατρέπει το 0 σε 1 και το 1 σε 0.
Για παράδειγμα, εάν έχουμε ένα byte που αποτελείται από 8 bits με την τιμή 00000000 εάν εφαρμόσουμε το unary bitwise complement operator ( ~ ) τα ψηφία θα αλλάξουν σε 11111111.
Ας δούμε ακόμα ένα παράδειγμα. Ας υποθέσουμε ότι έχουμε τον αριθμό 0111 που στο δικό μας δεκαδικό σύστημα μέτρησης είναι ο αριθμός 7.
Εάν εφαρμόσουμε τον ( ~ ) τελεστή τα bits θα αλλάξουν σε 1000 που είναι ο αριθμός 8.

Επίσης έχουμε τον signed left shift ( << ) τελεστή ο οποίος μετακινεί τα bits μια θέση προς τα αριστερά προσθέτοντας το ψηφίο 0 στην δεξιά μεριά του αριθμού. Για παράδειγμα, έχουμε τον αριθμό 00111.
Εάν εφαρμόσουμε τον ( << ) τελεστή στον αριθμό θα μετατραπεί σε 01110.
Το μηδενικό από την δεξιά πλευρά του αριθμού προστέθηκε για να συμπληρώσει την κενή θέση.

Με την ίδια λογική λειτουργεί και ο signed right operator ( >> ) μόνο που αυτός ο τελεστής μετακινεί τα bits μια θέση προς τα δεξιά προσθέτοντας ένα μηδενικό από τα αριστερά του αριθμού. Για παράδειγμα, ο αριθμός 00111 μετά την εφαρμογή του ( >> ) τελεστή θα μετατραπεί σε 00011.

Τέλος, σε αυτή την κατηγορία, έχουμε τον unsigned right shift ( >>> ) τελεστή που συμπεριφέρεται σαν τον signed right shift ( >> ) αλλά με μια διαφορά – Το ( >> >) μετακινεί προς τα δεξιά τα ψηφία του αριθμού όσες θέσεις αναφέρονται στην δεξιά πλευρά του τελεστή. Για παράδειγμα, εάν έχουμε την έκφραση 14>>>2 αυτό σημαίνει ότι όλα τα bits του αριθμού 14 θα μετακινηθούν προς τα δεξιά 2 θέσεις.
Εάν έχουμε τον αριθμό 1110 μετά την εκτέλεση του τελεστή ο αριθμός θα μετατραπεί σε 0011.

Τώρα πηγαίνουμε σε μια άλλη κατηγορία τελεστών που ονομάζονται bitwise. Ο πρώτος τελεστής αυτής της κατηγορίας είναι ο AND ( & ). Όταν χρησιμοποιούμε τον AND τελεστή ανάμεσα σε δύο bits, η απάντηση θα είναι το bit 1 μόνο όταν και τα δύο bits, από τα αριστερά και δεξιά του τελεστή, είναι 1.
Οποιοσδήποτε άλλος συνδυασμός θα μας δώσει 0 σαν αποτέλεσμα.
Ο πιο κάτω πίνακας σας δίνει μια πιο ολοκληρωμένη εικόνα:

Μετά έχουμε τον τελεστή OR ( | ) ο οποίος θα μας δώσει σαν αποτέλεσμα 1 εφόσον ένα από τα δύο ψηφία είναι 1. Εννοείται ότι εάν και τα δύο ψηφία είναι 1 τότε το αποτέλεσμα θα είναι 1. Ο πιο κάτω πίνακας σας δίνει μια πιο αναλυτική εικόνα:

Το πιο κάτω πρόγραμμα χρησιμοποιεί τον AND τελεστή για να εκτυπώσει τον αριθμό 2:

Το documentation της Oracle, παρουσιάζει μια λίστα με όλους τους τελεστές και μια σύντομη περιγραφή τους:

Μιχάλης Κασάπογλου(http://kassapoglou.com)

  • Σχόλια

0 Comments:

Scroll to Top