Kurzusok
/
Gleam
Gleam
/
Tanterv
/
Bittömbök
Bi

Bittömbök ebben a kurzusban: Gleam

2 feladat

A(z) Bittömbök fogalomról

A bináris adatokkal való munka trükkös lehet, ezért a Gleam biztosít egy BitArray típust és a hozzá tartozó szintaxist, amellyel bináris adatokat hozhatsz létre, illetve illeszthetsz rájuk mintát.

A bittömb-literálokat a <<>> szintaxissal hozod létre. Amikor egy bittömb-literált létrehozol, az szegmensekből épül fel. Minden szegmens egy értékből és egy annotációból áll, amelyeket egy : választ el. Az annotáció megadja, hogy hány bitet használunk az érték kódolásához, és teljesen el is hagyható; ilyenkor alapértelmezés szerint 8 bites egész értéket kapunk.

// 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>>

Ha a típust :1-ként adod meg, az a :size(1) rövidített alakja. A hosszabb szintaxist kell használnod, ha a bitméret egy változóból származik.

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

Bináris

A bináris egész literálokat közvetlenül kettes számrendszerben is leírhatod, ha a literál elé 0b-t teszel. Ne feledd, hogy amikor a tesztekben vagy a programodban kiíródnak, tízes számrendszerbeli számként jelennek meg.

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

Csonkítás

Ha a szegmens értéke meghaladja a szegmens típusának kapacitását, akkor az érték balról csonkul.

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

Elé fűzés és hozzáfűzés

A bittömb-szintaxissal a meglévő bittömb elé és mögé is fűzhetsz. A meglévő bittömbnél a :bits annotációt kell használnod.

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

Összefűzés

A változókban tárolt bittömböket ezzel a szintaxissal fűzheted össze. Két, változó méretű bittömb összefűzésekor a :bits annotációt kell használnod.

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

Mintaillesztés

Mintaillesztéssel értékeket is kinyerhetsz a bittömbből. Ismerned kell az egyes elkapni kívánt darabok bitméretét, egyetlen kivétellel: ismeretlen méretű bittömbre a :bits annotációval is illeszthetsz mintát, de ezt csak az utolsó darabnál használhatod.

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

Bittömbök vizsgálata

Note

Előfordulhat, hogy a bittömbök más formátumban jelennek meg, mint amilyenben létrehoztad őket. Ez a bittömbök tanulása közben gyakran okoz zavart.

Alapértelmezés szerint a bittömbök 8 bites darabokban (egy bájtban) jelennek meg, még akkor is, ha más méretű darabokkal hoztad létre őket.

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

Ha olyan bittömböt hozol létre, amely egy nyomtatható, UTF-8-kódolású stringet reprezentál, akkor Erlang célnyelven a echo keyword használatával stringként is megjelenhet. Ennek oka a Gleam belső string-ábrázolásának egyik megvalósítási részlete.

<<>>
// -> ""

<<65, 66, 67>>
// -> "ABC"
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg

Tanuld meg a(z) Bittömbök fogalmat