Διαδρομές
/
Gleam
Gleam
/
Ύλη
/
Πίνακες bit
Πί

Πίνακες bit σε Gleam

2 ασκήσεις

Σχετικά με την έννοια Πίνακες bit

Η εργασία με δυαδικά δεδομένα μπορεί να είναι δύσκολη, γι' αυτό το Gleam παρέχει έναν τύπο BitArray και τη σύνταξη που τον συνοδεύει για να κατασκευάζεις δυαδικά δεδομένα και να κάνεις αντιστοίχιση προτύπων πάνω τους.

Τα κυριολεκτικά πίνακα bit ορίζονται με τη σύνταξη <<>>. Όταν ορίζεις ένα κυριολεκτικό πίνακα bit, αυτό ορίζεται σε τμήματα. Κάθε τμήμα έχει μια τιμή και μια επισήμανση, που χωρίζονται με :. Η επισήμανση καθορίζει πόσα bit θα χρησιμοποιηθούν για την κωδικοποίηση της τιμής και μπορεί να παραλειφθεί εντελώς, οπότε προεπιλέγεται τιμή ακέραιου 8 bit.

// This defines a bit array with three segments of a single bit each
<<0:1, 1:1, 0:1>>

// This defines a bit array with three segments of 8 bits each
<<0, 1, 0>>

Ο καθορισμός του τύπου ως :1 είναι συντομογραφία για το :size(1). Πρέπει να χρησιμοποιήσεις τη μακρύτερη σύνταξη αν το μέγεθος σε bit προέρχεται από μια μεταβλητή.

let segment_size = 1
<<0:size(segment_size), 1:size(segment_size), 0:size(segment_size)>>

Δυαδικά

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

<<0b1011:4>> == <<11:4>>
// -> True

Αποκοπή

Αν η τιμή του τμήματος υπερβεί τη χωρητικότητα του τύπου του τμήματος, θα αποκοπεί από τα αριστερά.

<<0b1011:3>> == <<0b0011:3>>
// -> True

Προσθήκη στην αρχή και στο τέλος

Μπορείς και να προσθέσεις στην αρχή και να προσθέσεις στο τέλος ενός υπάρχοντος πίνακα bit χρησιμοποιώντας τη σύνταξη του πίνακα bit. Για τον υπάρχοντα πίνακα bit πρέπει να χρησιμοποιηθεί η επισήμανση :bits.

let value = <<0b110:3, 0b001:3>>
let new_value = <<0b011:3, value:bits, 0b000:3>>
// -> <<120, 8:size(4)>>

Συνένωση

Μπορούμε να συνενώσουμε πίνακες bit που είναι αποθηκευμένοι σε μεταβλητές χρησιμοποιώντας τη σύνταξη. Η επισήμανση :bits πρέπει να χρησιμοποιείται όταν συνενώνεις δύο πίνακες bit μεταβλητών μεγεθών.

let first = <<0b110:3>>
let second = <<0b001:3>>
let concatenated = <<first:bits, second:bits>>
// -> <<49:size(6)>>

Αντιστοίχιση προτύπων

Μπορείς επίσης να κάνεις αντιστοίχιση προτύπων για να πάρεις τιμές από τον πίνακα bit. Πρέπει να ξέρεις τον αριθμό των bit για κάθε κομμάτι που θέλεις να συλλάβεις, με μία εξαίρεση: η επισήμανση :bits μπορεί να χρησιμοποιηθεί για αντιστοίχιση προτύπων σε έναν πίνακα bit άγνωστου μεγέθους, αλλά μπορεί να χρησιμοποιηθεί μόνο για το τελευταίο κομμάτι.

let assert <<value:4, rest:bits>> = <<0b01101001:8>>
value == 0b0110
// -> true

Εξέταση πινάκων bit

Note

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

Από προεπιλογή, οι πίνακες bit εμφανίζονται σε κομμάτια των 8 bit (ένα byte), ακόμα κι αν τους δημιούργησες με κομμάτια διαφορετικού μεγέθους.

<<2011:11>>
// -> <<251, 3:size(3)>>

Αν δημιουργήσεις έναν πίνακα bit που αναπαριστά μια εκτυπώσιμη συμβολοσειρά κωδικοποιημένη σε UTF-8, μπορεί να εμφανιστεί ως συμβολοσειρά αν χρησιμοποιήσεις το echo keyword όταν στοχεύεις την Erlang. Αυτό οφείλεται σε μια λεπτομέρεια της υλοποίησης του τρόπου με τον οποίο το Gleam αναπαριστά εσωτερικά τις συμβολοσειρές.

<<>>
// -> ""

<<65, 66, 67>>
// -> "ABC"
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα

Μάθε την έννοια Πίνακες bit