diff --git a/vezbe/03.md b/vezbe/03.md index 1e2ee43..bdb7411 100644 --- a/vezbe/03.md +++ b/vezbe/03.md @@ -20,10 +20,11 @@ - [Maskiranje bita](#maskiranje-bita) - [Uključivanje bita](#uključivanje-bita) - [Isključivanje bita](#isključivanje-bita) - - [Vrednost pojedinačnog bita](#vrednost-pojedinačnog-bita) TO DO - - [Invertovanje vrednosti bita](#invertovanje-vrednosti-bita) TO DO + - [Vrednost pojedinačnog bita](#vrednost-pojedinačnog-bita) + - [Invertovanje vrednosti bita](#invertovanje-vrednosti-bita) - [Zadavanje formata](#zadavanje-formata) - [Sizeof()](#sizeof) + - [Const](#const) - [Math.h](#mathh) @@ -267,11 +268,42 @@ Upotrebom invertovane maske (i operatora bitovske konjunkcije), postižemo da sv #### Vrednost pojedinačnog bita -TO DO +Očitavanje vrednosti bita na određenoj poziciji je najopštija od svih operacija koje se mogu izvoditi nad pojedinačnim bitovima. Tipično se sprovodi postupak kojim se traženi bit pomera na prvu poziciju, i potom se očitava vrednost prvog bita (ili, u praktičnom smislu - vrednost traženog bita). + +Ako je potrebno očitati `4. bit` sa desne strane u promenljivoj `a`, prvo je potrebno dovesti četvrti bit promenljive a na prvu poziciju, preko operatora `>>`: + +| a | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | +|---|---|---|---|---|---|---|---|---| +| **p** | | | | | | | | 4 | +| **x = a >> (p - 1)** | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | + +Zatim, uz korišćenje bitovskog operatora konjunkcije (&), rezultat se svodi na 0 ili 1 (i pamti se preko dodatne promenljive). + +| x | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | +|---|---|---|---|---|---|---|---|---| +| **1** | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | +| **r = x & 1** | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | + +U C programskom jeziku, očitavanje vrednosti pojedinačnog bita rešeno je sledećom linijom: `r = a >> (p - 1) & 1;` #### Invertovanje vrednosti bita -TO DO +Invertovanje vrednosti pojedinačnog bita je jedna od najjednostavnijih bitovskih operacija. +Iako deluje logično, invertovanje pojedinačnog bita ne može se rešiti koriščenjem operatora ~. Kako bismo izolovali pojedinačan bit, kreiraćemo masku, a potom vrednost invertovati korišćenjem operatora `^` (XOR). + +| m | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | +|---|---|---|---|---|---|---|---|---| +| **p** | | | | | | | | **4** | +| **m << (p - 1)** | 0 | 0 | 0 | 0 | **1** | 0 | 0 | 0 | + +Generisanje maske `m`. + +| a | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | +|---|---|---|---|---|---|---|---|---| +| **m** | 0 | 0 | 0 | 0 | **1** | 0 | 0 | 0 | +| **a = a ^ m** | 0 | 0 | 0 | 1 | **0** | 1 | 0 | 1 | + +Primenom operatora `XOR` (a = a ^ m) invertovaćemo odabrani bit. ## Zadavanje formata @@ -358,6 +390,20 @@ Deljenjem ukupne veličine niza veličinom tipa elemenata niza dobijamo broj ele Pored toga, veoma je važan za `dinamičku alokaciju memorije`, o čemu će biti reči u narednim terminima. +## Const + +Kvalifikator `const` se koristi pri deklaraciji varijable kako bi se naglasilo da se vrednost te promenljive neće menjati (da je konstanta). Konstanta jednom dobija svoju vrednost i više se ne može menjati. + +``` +int main() +{ + const int var = 100; + var += 10; //javlja se greška pri kompajliranju (read-only variable) + + return 0; +} +``` + ## Math.h Math.h je matematička biblioteka u C programskom jeziku. Kako bismo mogli da je koristimo, potrebno je da je uključimo u kod pomoću `#include `. @@ -372,5 +418,4 @@ Neke od osnovnih funkcija ove biblioteke su: - `cos(x)` - izračunava kosinus broja x - ... - -[aa](https://en.cppreference.com/w/c/language/operator_precedence) \ No newline at end of file +Kompajliranje sa ovom bibliotekom vrši se komadom `gcc -o izv primer.c -lm`. \ No newline at end of file