7.7 Οι λειτουργίες bitwise (bitwise operations) στην JavaScript

Οι λειτουργίες bitwise (bitwise operations) είναι λειτουργίες που εφαρμόζονται σε κάθε bit των αριθμών σε μια δυαδική μορφή. Οι bitwise operations εκτελούνται σε αριθμούς μετατρέποντας πρώτα τους αριθμούς σε δυαδική μορφή και στη συνέχεια εφαρμόζοντας τις λειτουργίες σε κάθε bit ξεχωριστά.

Οι πιο συνηθισμένες bitwise operations είναι οι εξής:

  1. AND (&): Εφαρμόζει τον τελεστή AND σε κάθε bit των δύο αριθμών. Ο τελικός αριθμός θα έχει 1s μόνο εκεί που και οι δύο αριθμοί έχουν 1s.
  2. OR (|): Εφαρμόζει τον τελεστή OR σε κάθε bit των δύο αριθμών. Ο τελικός αριθμός θα έχει 1s εκεί που τουλάχιστον ένας από τους δύο αριθμούς έχει 1.
  3. XOR (^): Εφαρμόζει τον τελεστή XOR σε κάθε bit των δύο αριθμών. Ο τελικός αριθμός θα έχει 1s εκεί που οι δύο αριθμοί έχουν διαφορετικό bit.
  4. NOT (~): Εφαρμόζει τον τελεστή NOT σε κάθε bit του αριθμού. Ο τελικός αριθμός θα έχει αντιστραμμένα (complement) τα bits του αρχικού αριθμού (0s γίνονται 1s και 1s γίνονται 0s).
  5. Left Shift (<<): Μετακινεί τα bits του αριθμού προς τα αριστερά και προσθέτει μηδενικά στα δεξιά.
  6. Right Shift (>>): Μετακινεί τα bits του αριθμού προς τα δεξιά και προσθέτει μηδενικά στα αριστερά. Αν ο αριθμός είναι αρνητικός, προσθέτει ένα 1 στα αριστερά.

Οι bitwise operations είναι χρήσιμες για τις περιπτώσεις όπου θέλετε να εκτελέσετε λογικές πράξεις μεταξύ των bits των αριθμών. Συνήθως χρησιμοποιούνται σε προγραμματισμό χαμηλού επιπέδου ή σε περιπτώσεις που χρειάζεται γρήγορος κώδικας για τη χειρισμό δυαδικών δεδομένων. Πρέπει να χρησιμοποιούνται με προσοχή, καθώς μπορεί να είναι ευάλωτες σε λάθη όταν δεν γίνεται κατανοητή η λειτουργία τους. Είναι σημαντικό να γνωρίζετε πώς λειτουργούν οι bitwise operations και να τις χρησιμοποιείτε με προσοχή.

Παρακάτω παρουσιάζονται παραδείγματα χρήσης των bitwise operations:

// Χρησιμοποιούμε τις bitwise operations για τον έλεγχο ποια bits είναι ενεργά
var a = 5; // δυαδικό: 0101
var b = 3; // δυαδικό: 0011

console.log(a & b); // Αποτέλεσμα του AND: 0001 (1)
console.log(a | b); // Αποτέλεσμα του OR: 0111 (7)
console.log(a ^ b); // Αποτέλεσμα του XOR: 0110 (6)
console.log(~a);    // Αποτέλεσμα του NOT: 1010 (-6 σε δεκαδικό, ανάλογα με τον τύπο των bit που χειρίζεστε)

// Χρησιμοποιούμε τις bitwise operations για να μετακινήσουμε τα bits
var num = 8; // δυαδικό: 1000
console.log(num << 2); // Left Shift: 100000 (32)
console.log(num >> 2); // Right Shift: 10 (2)

// Μπορούμε να χρησιμοποιήσουμε bitwise operations για να πραγματοποιήσουμε διάφορες λογικές ενέργειες
var flag1 = 0b0010;
var flag2 = 0b0100;

if ((flag1 & flag2) !== 0) {
  console.log("Κοινά bits: Ναι");
} else {
  console.log("Κοινά bits: Όχι");
}

Όπως φαίνεται από τα παραπάνω παραδείγματα, οι bitwise operations είναι χρήσιμες όταν χρειάζεται να εκτελεστούν λογικές πράξεις σε δυαδικά δεδομένα ή όταν θέλουμε να μετακινήσουμε τα bits ενός αριθμού. Ωστόσο, πριν τις χρησιμοποιήσετε, είναι σημαντικό να έχετε κατανόηση της δυαδικής αναπαράστασης των αριθμών και να είστε προσεκτικοί ώστε να αποφεύγετε προβλήματα και σφάλματα στον κώδικά σας.

[adinserter block=”2″]

Οι λειτουργίες bitwise operators στη JavaScript είναι οι εξής:

  1. AND (&): Θέτει κάθε bit σε 1 αν και τα δύο bits είναι 1.
  2. OR (|): Θέτει κάθε bit σε 1 αν τουλάχιστον ένα από τα δύο bits είναι 1.
  3. XOR (^): Θέτει κάθε bit σε 1 αν μόνο ένα από τα δύο bits είναι 1.
  4. NOT (~): Αντιστρέφει όλα τα bits, μετατρέποντας τα 0 σε 1 και τα 1 σε 0.
  5. Zero fill left shift (<<): Μετακινεί τα bits προς τα αριστερά, εισάγοντας μηδενικά από τα δεξιά και αφήνοντας τα αριστερά bits να πέσουν εκτός.
  6. Signed right shift (>>): Μετακινεί τα bits προς τα δεξιά, εισάγοντας αντίγραφα του αριστερού bit από τα αριστερά και αφήνοντας τα δεξιά bits να πέσουν εκτός. Εάν ο αριθμός είναι αρνητικός, προσθέτει ένα 1 στα αριστερά.
  7. Zero fill right shift (>>>): Μετακινεί τα bits προς τα δεξιά, εισάγοντας μηδενικά από τα αριστερά και αφήνοντας τα δεξιά bits να πέσουν εκτός. Ανεξάρτητα από τον τύπο του αριθμού, προσθέτει μηδενικά στα αριστερά.

Οι bitwise operators εφαρμόζονται σε ακέραιους αριθμούς και μετατρέπουν τους αριθμούς σε δυαδική μορφή πριν από την εκτέλεση των λειτουργιών. Χρησιμοποιούνται για τις περιπτώσεις που χρειάζεται να εκτελεστούν λογικές πράξεις σε δυαδικά δεδομένα ή όταν χρειάζεται να μετακινήσουμε τα bits ενός αριθμού. Πρέπει να χρησιμοποιούνται με προσοχή, καθώς μπορεί να είναι ευάλωτες σε λάθη όταν δεν γίνεται κατανόηση της δυαδικής αναπαράστασης των αριθμών.

Παρακάτω είναι μερικά παραδείγματα εφαρμογής των λειτουργιών bitwise:

  1. 5 & 1: Ο τελεστής AND δίνει 1 όταν και τα δύο bits είναι 1. Έτσι, 5 (0101) & 1 (0001) = 1 (0001).
  2. 5 | 1: Ο τελεστής OR δίνει 1 όταν τουλάχιστον ένα από τα δύο bits είναι 1. Έτσι, 5 (0101) | 1 (0001) = 5 (0101).
  3. ~5: Ο τελεστής NOT αντιστρέφει όλα τα bits. Έτσι, ~5 (0101) = 10 (1010).
  4. 5 << 1: Ο τελεστής left shift μετακινεί τα bits προς τα αριστερά εισάγοντας μηδενικά από τα δεξιά. Έτσι, 5 (0101) << 1 = 10 (1010).
  5. 5 ^ 1: Ο τελεστής XOR δίνει 1 όταν τα δύο bits είναι διαφορετικά. Έτσι, 5 (0101) ^ 1 (0001) = 4 (0100).
  6. 5 >> 1: Ο τελεστής signed right shift μετακινεί τα bits προς τα δεξιά εισάγοντας αντίγραφα του αριστερού bit από τα αριστερά. Έτσι, 5 (0101) >> 1 = 2 (0010).
  7. 5 >>> 1: Ο τελεστής zero fill right shift μετακινεί τα bits προς τα δεξιά εισάγοντας μηδενικά από τα αριστερά. Έτσι, 5 (0101) >>> 1 = 2 (0010).

Οι λειτουργίες bitwise operators είναι χρήσιμες για να εκτελέσετε λογικές πράξεις σε δυαδικά δεδομένα και να μετακινήσετε τα bits ενός αριθμού. Πρέπει να είστε προσεκτικοί κατά την χρήση τους, καθώς εφαρμόζονται σε ακέραιους αριθμούς και μπορούν να προκαλέσουν ανεπιθύμητα αποτελέσματα εάν δεν κατανοείτε καλά την δυαδική αναπαράσταση των αριθμών.

Στη JavaScript, οι αριθμοί αποθηκεύονται ως 64-bit δεκαδικά αριθμητικά κινητής υποδιαστολής (floating point). Ωστόσο, κατά την εκτέλεση bitwise λειτουργιών, όλες οι πράξεις πραγματοποιούνται σε 32-bit δυαδικούς αριθμούς (binary numbers).

Πριν από την εκτέλεση μιας bitwise λειτουργίας, η JavaScript μετατρέπει τους αριθμούς σε 32-bit signed integers. Αυτό σημαίνει ότι το πρόσημο (sign) του αριθμού διατηρείται, και μπορεί να επηρεάσει την ερμηνεία των αποτελεσμάτων. Στη συνέχεια, μετά την εκτέλεση της bitwise λειτουργίας, το αποτέλεσμα μετατρέπεται πίσω σε 64-bit JavaScript αριθμούς.

Αυτό μπορεί να προκαλέσει κάποια εκπλήξεις ή ανεπιθύμητα αποτελέσματα κατά την εκτέλεση bitwise λειτουργιών, ειδικά όταν χρησιμοποιούνται αρνητικοί αριθμοί. Επομένως, είναι σημαντικό να είστε προσεκτικοί κατά τη χρήση bitwise λειτουργιών σε JavaScript και να έχετε κατανόηση της μετατροπής που γίνεται πίσω από τις σκηνές.

Ο τελεστής bitwise AND στη JavaScript συμβολίζεται με τον χαρακτήρα “&”. Χρησιμοποιείται για να εκτελέσει τη λογική πράξη AND (και) ανάμεσα στα bits δύο αριθμών.

Η σύνταξη για τον τελεστή bitwise AND είναι:

number1 & number2

Ο τελεστής AND εφαρμόζεται bit-by-bit σε κάθε ζεύγος bits των δύο αριθμών. Αν και τα δύο bits είναι 1, το αντίστοιχο bit στο αποτέλεσμα θα είναι 1. Αν έστω και ένα από τα δύο bits είναι 0, το αντίστοιχο bit στο αποτέλεσμα θα είναι 0.

Παράδειγμα:

let num1 = 5; // 0101 in binary
let num2 = 3; // 0011 in binary

let result = num1 & num2;
console.log(result); // Output: 1 (0001 in binary)

Στο παράδειγμα αυτό, τα bits των δύο αριθμών είναι:

num1 = 0101
num2 = 0011

Όταν εφαρμόζουμε τον τελεστή bitwise AND, παίρνουμε:

result = 0001 (1 in decimal)

Ο τελικός αριθμός είναι 1 (0001 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 1.

Ο τελεστής bitwise OR στη JavaScript συμβολίζεται με τον χαρακτήρα “|”. Χρησιμοποιείται για να εκτελέσει τη λογική πράξη OR (ή) ανάμεσα στα bits δύο αριθμών.

Η σύνταξη για τον τελεστή bitwise OR είναι:

number1 | number2

Ο τελεστής OR εφαρμόζεται bit-by-bit σε κάθε ζεύγος bits των δύο αριθμών. Αν τουλάχιστον ένα από τα δύο bits είναι 1, το αντίστοιχο bit στο αποτέλεσμα θα είναι 1. Αν και τα δύο bits είναι 0, το αντίστοιχο bit στο αποτέλεσμα θα είναι 0.

Παράδειγμα:

let num1 = 5; // 0101 in binary
let num2 = 3; // 0011 in binary

let result = num1 | num2;
console.log(result); // Output: 7 (0111 in binary)

Στο παράδειγμα αυτό, τα bits των δύο αριθμών είναι:

num1 = 0101
num2 = 0011

Όταν εφαρμόζουμε τον τελεστή bitwise OR, παίρνουμε:

result = 0111 (7 in decimal)

Ο τελικός αριθμός είναι 7 (0111 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 7.

Ο τελεστής bitwise XOR (exclusive OR) στη JavaScript συμβολίζεται με τον χαρακτήρα “^”. Χρησιμοποιείται για να εκτελέσει τη λογική πράξη XOR (αποκλειστικό ή) ανάμεσα στα bits δύο αριθμών.

Η σύνταξη για τον τελεστή bitwise XOR είναι:

number1 ^ number2

Ο τελεστής XOR εφαρμόζεται bit-by-bit σε κάθε ζεύγος bits των δύο αριθμών. Αν τα δύο bits είναι διαφορετικά (ένα 0 και ένα 1), το αντίστοιχο bit στο αποτέλεσμα θα είναι 1. Αν τα δύο bits είναι και τα δύο 0 ή και τα δύο 1, το αντίστοιχο bit στο αποτέλεσμα θα είναι 0.

Παράδειγμα:

let num1 = 5; // 0101 in binary
let num2 = 3; // 0011 in binary

let result = num1 ^ num2;
console.log(result); // Output: 6 (0110 in binary)

Στο παράδειγμα αυτό, τα bits των δύο αριθμών είναι:

num1 = 0101
num2 = 0011

Όταν εφαρμόζουμε τον τελεστή bitwise XOR, παίρνουμε:

result = 0110 (6 in decimal)

Ο τελικός αριθμός είναι 6 (0110 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 6.

Ο τελεστής bitwise AND (&) στη JavaScript εκτελεί τη λογική πράξη AND (και) ανάμεσα σε κάθε ζεύγος bits δύο αριθμών.

[adinserter block=”3″]

Η σύνταξη για τον τελεστή bitwise AND είναι:

number1 & number2

Ο τελεστής AND εφαρμόζεται bit-by-bit σε κάθε ζεύγος bits των δύο αριθμών. Αν και τα δύο bits είναι 1, το αντίστοιχο bit στο αποτέλεσμα θα είναι 1. Αν έστω και ένα από τα δύο bits είναι 0, το αντίστοιχο bit στο αποτέλεσμα θα είναι 0.

Παράδειγμα:

let num1 = 5; // 0101 in binary
let num2 = 3; // 0011 in binary

let result = num1 & num2;
console.log(result); // Output: 1 (0001 in binary)

Στο παράδειγμα αυτό, τα bits των δύο αριθμών είναι:

num1 = 0101
num2 = 0011

Όταν εφαρμόζεται ο τελεστής bitwise AND, παίρνουμε:

result = 0001 (1 in decimal)

Ο τελικός αριθμός είναι 1 (0001 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 1.

Ο τελεστής bitwise OR (|) στη JavaScript εκτελεί τη λογική πράξη OR (ή) ανάμεσα σε κάθε ζεύγος bits δύο αριθμών.

Η σύνταξη για τον τελεστή bitwise OR είναι:

number1 | number2

Ο τελεστής OR εφαρμόζεται bit-by-bit σε κάθε ζεύγος bits των δύο αριθμών. Αν τουλάχιστον ένα από τα δύο bits είναι 1, το αντίστοιχο bit στο αποτέλεσμα θα είναι 1. Αν και τα δύο bits είναι 0, το αντίστοιχο bit στο αποτέλεσμα θα είναι 0.

Παράδειγμα:

let num1 = 5; // 0101 in binary
let num2 = 3; // 0011 in binary

let result = num1 | num2;
console.log(result); // Output: 7 (0111 in binary)

Στο παράδειγμα αυτό, τα bits των δύο αριθμών είναι:

num1 = 0101
num2 = 0011

Όταν εφαρμόζεται ο τελεστής bitwise OR, παίρνουμε:

result = 0111 (7 in decimal)

Ο τελικός αριθμός είναι 7 (0111 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 7.

Ο τελεστής bitwise XOR (^) στη JavaScript εκτελεί τη λογική πράξη XOR (αποκλειστικό ή) ανάμεσα σε κάθε ζεύγος bits δύο αριθμών.

Η σύνταξη για τον τελεστή bitwise XOR είναι:

number1 ^ number2

Ο τελεστής XOR εφαρμόζεται bit-by-bit σε κάθε ζεύγος bits των δύο αριθμών. Αν τα δύο bits είναι διαφορετικά (ένα 0 και ένα 1), το αντίστοιχο bit στο αποτέλεσμα θα είναι 1. Αν τα δύο bits είναι και τα δύο 0 ή και τα δύο 1, το αντίστοιχο bit στο αποτέλεσμα θα είναι 0.

Παράδειγμα:

let num1 = 5; // 0101 in binary
let num2 = 3; // 0011 in binary

let result = num1 ^ num2;
console.log(result); // Output: 6 (0110 in binary)

Στο παράδειγμα αυτό, τα bits των δύο αριθμών είναι:

num1 = 0101
num2 = 0011

Όταν εφαρμόζεται ο τελεστής bitwise XOR, παίρνουμε:

result = 0110 (6 in decimal)

Ο τελικός αριθμός είναι 6 (0110 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 6.

Ο τελεστής bitwise NOT (~) στη JavaScript εκτελεί τη λογική πράξη NOT (αρνητικό) σε κάθε bit ενός αριθμού. Αυτό σημαίνει ότι αν ένα bit είναι 0, τότε θα γίνει 1, και αν είναι 1, τότε θα γίνει 0.

Η σύνταξη για τον τελεστή bitwise NOT είναι:

~number

Ο τελεστής NOT εφαρμόζεται σε όλα τα bits ενός αριθμού. Αυτό σημαίνει ότι αν το αρχικό bit είναι 0, το αντίστοιχο bit στο αποτέλεσμα θα είναι 1, και αν το αρχικό bit είναι 1, το αντίστοιχο bit στο αποτέλεσμα θα είναι 0.

Παράδειγμα:

let num = 5; // 0101 in binary

let result = ~num;
console.log(result); // Output: -6

Στο παράδειγμα αυτό, τα bits του αριθμού 5 είναι:

num = 0101

Όταν εφαρμόζεται ο τελεστής bitwise NOT, παίρνουμε:

result = 1010 (-6 in decimal, considering two's complement representation)

Ο τελικός αριθμός είναι -6. Σε αυτό το παράδειγμα, παρατηρούμε ότι ο τελεστής NOT αντιστρέφει όλα τα bits του αριθμού και προσθέτει το 1 στο αποτέλεσμα, ακολουθώντας τον κανόνα της αντίστροφης δυαδικής αναπαράστασης (two’s complement).

[adinserter block=”4″]

Ο τελεστής (zero fill) bitwise left shift (<<) στη JavaScript εκτελεί μια πράξη αριστερής μετατόπισης σε κάθε bit ενός αριθμού. Κατά την αριστερή μετατόπιση, τα bits του αριθμού “μετακινούνται” προς τα αριστερά και προστίθενται μηδενικά στα δεξιά.

Η σύνταξη για τον τελεστή (zero fill) bitwise left shift είναι:

number << count

Ο τελεστής left shift μετακινεί τα bits του αριθμού προς τα αριστερά κατά τον αριθμό των θέσεων που καθορίζεται από τον αριθμό count. Τα μηδενικά προστίθενται στην δεξιά πλευρά του αριθμού.

Παράδειγμα:

let num = 5; // 00000101 in binary

let result = num << 2;
console.log(result); // Output: 20 (00010100 in binary)

Στο παράδειγμα αυτό, τα bits του αριθμού 5 είναι:

num = 00000101

Όταν εφαρμόζεται ο τελεστής left shift μετατόπισης κατά 2 θέσεις, παίρνουμε:

result = 00010100 (20 in decimal)

Ο τελικός αριθμός είναι 20 (00010100 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 20.

Ο τελεστής (sign preserving) bitwise right shift (>>) στη JavaScript εκτελεί μια πράξη δεξιάς μετατόπισης σε κάθε bit ενός αριθμού. Κατά τη δεξιά μετατόπιση, τα bits του αριθμού “μετακινούνται” προς τα δεξιά και τα διατηρούμενα bits που προστίθενται στα αριστερά είναι το bit προσήλωσης του προτελευταίου bit.

Η σύνταξη για τον τελεστή (sign preserving) bitwise right shift είναι:

number >> count

Ο τελεστής right shift μετακινεί τα bits του αριθμού προς τα δεξιά κατά τον αριθμό των θέσεων που καθορίζεται από τον αριθμό count. Τα bits που προστίθενται στα αριστερά είναι το bit προσήλωσης του προτελευταίου bit, διατηρώντας το πρόσημο του αριθμού.

Παράδειγμα:

let num = 20; // 00010100 in binary

let result = num >> 2;
console.log(result); // Output: 5 (00000101 in binary)

Στο παράδειγμα αυτό, τα bits του αριθμού 20 είναι:

num = 00010100

Όταν εφαρμόζεται ο τελεστής right shift μετατόπισης κατά 2 θέσεις, παίρνουμε:

result = 00000101 (5 in decimal)

Ο τελικός αριθμός είναι 5 (00000101 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 5.

Ο τελεστής (zero fill) bitwise right shift (>>>) στη JavaScript εκτελεί μια πράξη δεξιάς μετατόπισης σε κάθε bit ενός αριθμού, με τη διαφορά ότι όλα τα bits που προστίθενται στα αριστερά είναι μηδενικά.

Η σύνταξη για τον τελεστή (zero fill) bitwise right shift είναι:

number >>> count

Ο τελεστής right shift μετακινεί τα bits του αριθμού προς τα δεξιά κατά τον αριθμό των θέσεων που καθορίζεται από τον αριθμό count. Τα bits που προστίθενται στα αριστερά είναι μηδενικά.

Παράδειγμα:

let num = 20; // 00010100 in binary

let result = num >>> 2;
console.log(result); // Output: 5 (00000101 in binary)

Στο παράδειγμα αυτό, τα bits του αριθμού 20 είναι:

num = 00010100

Όταν εφαρμόζεται ο τελεστής zero fill right shift κατά 2 θέσεις, παίρνουμε:

result = 00000101 (5 in decimal)

Ο τελικός αριθμός είναι 5 (00000101 σε δυαδική μορφή), το οποίο αντιστοιχεί στο δεκαδικό 5. Όλα τα bits που προστίθενται στα αριστερά είναι μηδενικά.

[adinserter block=”5″]

Οι δυαδικοί αριθμοί (binary numbers) είναι μια μορφή αριθμητικής αναπαράστασης που βασίζεται στο δυαδικό σύστημα. Στο δυαδικό σύστημα, οι αριθμοί αναπαρίστανται χρησιμοποιώντας μόνο δύο ψηφία, το 0 και το 1. Κάθε ψηφίο σε έναν δυαδικό αριθμό αντιπροσωπεύει ένα δυναμικό της βάσης του 2.

Για παράδειγμα, ο αριθμός 10 στο δυαδικό σύστημα αναπαρίσταται ως 1010. Αυτό σημαίνει ότι το πρώτο ψηφίο αντιπροσωπεύει το 2^3 (8), το δεύτερο ψηφίο αντιπροσωπεύει το 2^2 (4), το τρίτο ψηφίο αντιπροσωπεύει το 2^1 (2) και το τέταρτο ψηφίο αντιπροσωπεύει το 2^0 (1). Αν προσθέσουμε όλα τα δυνάμεις του 2 που αντιπροσωπεύουν τα “1”, παίρνουμε τον αριθμό 10.

Οι δυαδικοί αριθμοί είναι βασικοί στην ψηφιακή τεχνολογία και τον υπολογιστικό κόσμο, καθώς η ηλεκτρονική συσκευές λειτουργούν με βάση τη δυαδική αναπαράσταση των δεδομένων. Κάθε bit σε έναν υπολογιστή μπορεί να είναι 0 ή 1, ανάλογα με τη φυσική κατάσταση της ηλεκτρονικής συσκευής.

Οι δυαδικοί αριθμοί με μόνο ένα ορισμένο bit είναι εύκολοι να κατανοηθούν:

Στο δυαδικό σύστημα, όταν ένα μόνο bit είναι τοποθετημένο στην τιμή 1 και τα υπόλοιπα bits είναι 0, αυτό συμβολίζει μια συγκεκριμένη δυναμική της βάσης του 2. Για παράδειγμα:

  • Ο αριθμός 1 στο δυαδικό σύστημα είναι 0001.
  • Ο αριθμός 2 στο δυαδικό σύστημα είναι 0010.
  • Ο αριθμός 4 στο δυαδικό σύστημα είναι 0100.
  • Ο αριθμός 8 στο δυαδικό σύστημα είναι 1000.

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

Η τοποθέτηση περισσότερων bit αποκαλύπτει το δυαδικό πρότυπο:

Στο δυαδικό σύστημα, τοποθετώντας περισσότερα από ένα bits στην τιμή 1, μπορούμε να αναγνωρίσουμε διάφορα πρότυπα. Κάθε bit αντιπροσωπεύει μια δυναμική της βάσης του 2, και όταν συνδυάζονται πολλά bits, δημιουργούνται διάφορα δυαδικά πρότυπα.

Παραδείγματα:

  • Ο αριθμός 3 στο δυαδικό σύστημα είναι 0011.
  • Ο αριθμός 5 στο δυαδικό σύστημα είναι 0101.
  • Ο αριθμός 6 στο δυαδικό σύστημα είναι 0110.
  • Ο αριθμός 9 στο δυαδικό σύστημα είναι 1001.
  • Ο αριθμός 12 στο δυαδικό σύστημα είναι 1100.

Κάθε συνδυασμός των bits με τις τιμές 0 ή 1 δημιουργεί ένα μοναδικό δυαδικό πρότυπο, το οποίο μπορεί να χρησιμοποιηθεί για αναπαραστάσεις δεδομένων, υπολογισμούς και λογικές εργασίες σε υπολογιστικά συστήματα.

Οι δυαδικοί αριθμοί στη JavaScript αποθηκεύονται σε μορφή δυο συμπληρωματικών. Αυτό σημαίνει ότι ένας αρνητικός αριθμός είναι το αποτέλεσμα του αντιστροφής (bitwise NOT) του αριθμού συν την προσθήκη 1.

Για παράδειγμα, για να αναπαραστήσουμε τον αριθμό -5 σε δυαδική μορφή σε δυο συμπληρωματικά, αρχικά αναπαριστούμε τον αριθμό 5 σε δυαδικό με τον τρόπο που αναφέραμε προηγουμένως:

5: 00000101

Στη συνέχεια, αντιστρέφουμε (bitwise NOT) τον αριθμό:

NOT 00000101 = 11111010

Και, τέλος, προσθέτουμε 1:

11111010 + 1 = 11111011

Ο τελικός αριθμός -5 σε δυαδική μορφή δυο συμπληρωματικών είναι 11111011.

Η διαδικασία των δυο συμπληρωματικών χρησιμοποιείται για να αναπαραστήσει αρνητικούς αριθμούς σε δυαδική μορφή και επιτρέπει τον υπολογισμό με αρνητικούς αριθμούς σε δυαδική μορφή χωρίς να χρειάζεται ξεχωριστή αναπαράσταση.

Η μετατροπή ενός δεκαδικού αριθμού σε δυαδική μορφή ακολουθεί έναν απλό αλγόριθμο που περιλαμβάνει το διαίρει και κυρίαρχε. Ακολουθήστε τα παρακάτω βήματα για να μετατρέψετε έναν δεκαδικό αριθμό σε δυαδική μορφή:

  1. Ξεκινήστε με τον δεκαδικό αριθμό που θέλετε να μετατρέψετε σε δυαδική μορφή.
  2. Χωρίστε τον δεκαδικό αριθμό σε δύο μέρη: τον ακέραιο μέρος και το δεκαδικό μέρος.
  3. Αρχίστε με το ακέραιο μέρος του αριθμού και διαιρέστε τον με το 2.
  4. Κρατήστε το υπόλοιπο της διαίρεσης (0 ή 1) ως το πρώτο ψηφίο του δυαδικού αριθμού.
  5. Διαιρέστε το ακέραιο μέρος του αριθμού που προκύπτει από το βήμα 3 με το 2 και επαναλάβετε τη διαδικασία για να βρείτε τα υπόλοιπα των ψηφίων του δυαδικού αριθμού.
  6. Συνεχίστε τη διαίρεση και τον υπολογισμό των υπολοίπων μέχρι να φθάσετε σε μηδενικό ακέραιο μέρος.
  7. Οι ψηφία που υπολογίστηκαν στα βήματα 4 έως 6 θα συνθέσουν τον δυαδικό αριθμό ανάποδα. Αντιστρέψτε τη σειρά των ψηφίων για να έχετε τον δυαδικό αριθμό σε σωστή σειρά.

Ας δούμε ένα παράδειγμα:

Παράδειγμα: Μετατρέψτε τον δεκαδικό αριθμό 25 σε δυαδική μορφή.

  1. Διαιρέστε 25 με 2: 25 ÷ 2 = 12, υπόλοιπο 1.
  2. Διαιρέστε 12 με 2: 12 ÷ 2 = 6, υπόλοιπο 0.
  3. Διαιρέστε 6 με 2: 6 ÷ 2 = 3, υπόλοιπο 0.
  4. Διαιρέστε 3 με 2: 3 ÷ 2 = 1, υπόλοιπο 1.
  5. Διαιρέστε 1 με 2: 1 ÷ 2 = 0, υπόλοιπο 1.

Οι υπόλοιποι σε αντίστροφη σειρά είναι 11001. Επομένως, ο δυαδικός αριθμός που αντιστοιχεί στον δεκαδικό αριθμό 25 είναι 11001.

Η μετατροπή ενός δυαδικού αριθμού σε δεκαδική μορφή ακολουθεί έναν απλό αλγόριθμο, όπου κάθε ψηφίο του δυαδικού αριθμού αντιστοιχεί σε ένα δυνάμει του 2. Ακολουθήστε τα παρακάτω βήματα για να μετατρέψετε έναν δυαδικό αριθμό σε δεκαδική μορφή:

  1. Ξεκινήστε με τον δυαδικό αριθμό που θέλετε να μετατρέψετε σε δεκαδική μορφή.
  2. Ξεκινήστε από το δεξιότερο ψηφίο του δυαδικού αριθμού και αντιστοιχίστε την τιμή του (0 ή 1) στην αντίστοιχη δύναμη του 2. Η δύναμη του 2 ξεκινά από 2^0 (1), και αυξάνεται κατά 1 μονάδα με κάθε επόμενο ψηφίο προς τα αριστερά.
  3. Προσθέστε τις τιμές των δυνάμεων του 2 για όλα τα ψηφία του δυαδικού αριθμού για να υπολογίσετε το δεκαδικό ισοδύναμο.

Ας δούμε ένα παράδειγμα:

Παράδειγμα: Μετατρέψτε τον δυαδικό αριθμό 11001 σε δεκαδική μορφή.

  1. Ξεκινήστε από το δεξιότερο ψηφίο: 1 * 2^0 = 1.
  2. Συνεχίστε με το επόμενο ψηφίο προς τα αριστερά: 0 * 2^1 = 0.
  3. Συνεχίστε με το επόμενο ψηφίο: 0 * 2^2 = 0.
  4. Συνεχίστε με το επόμενο ψηφίο: 1 * 2^3 = 8.
  5. Συνεχίστε με το επόμενο ψηφίο: 1 * 2^4 = 16.

Προσθέστε τις τιμές: 1 + 0 + 0 + 8 + 16 = 25.

Ο δυαδικός αριθμός 11001 αντιστοιχεί στον δεκαδικό αριθμό 25.

21 Αυγούστου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων