#include // predstavljanje zastavica - flag-ova uz pomoc bitova u c-u // tehnika koja se koristi da se vise pojedinacnih bool-ovskih konstanti // predstavi preko bitova jedne celobrojne promenljive // broj flagova koji se na ovaj nacin mogu predstaviti zavisi od velicine tipa // int, 32-bitni int moze da sadrzi 32 razlicite vrednosti // flagovi mogu da predstavljaju razlicita svojstva koja zelimo da opisemo // mogu da oznacavaju svojstva prozora sa kojim radimo (da li je prozor aktivan // ili ne, da li je prozor minimizovan ili ne, da li je prozor maksimizovan ili // ne // mogu da oznacavaju // postavljanje bita na poziciji i se radi operacijom 1 << i // mozemo da napravimo maske za manipulaciju sa pozicijom i preko enum #define f0 (1 << 0) // 1 #define f1 (1 << 1) // 2 #define f2 (1 << 2) // 4 #define f3 (1 << 3) // 8 #define f4 (1 << 4) // 16 #define f5 (1 << 5) // 32 #define f6 (1 << 6) // 64 #define f7 (1 << 7) // 128 // x promenljiva koja cuva skup flagova // potrebno je imati nacin za laku manipulaciju sa pojedinacnim flagovima // i proveru vrednosti pojedinacnih flagova // postavljanje flaga na True, tj. vrednost bita se postavlja na 1 // disjunkcija sa maskom 000 1 000 // x = x | flag // postavljanje flaga na False, tj. vrednost bita se postavlja na 0 // rezultat 0 bez obzira na vrednost, na poziciji i // rezultat nepromenjen na ostalim pozicijama // napravimo 000...1...000 // invertujemo 111...0...111 // uradimo konjunkciju // x = x & ~flag //invertovanje vrednosti flaga na poziciji i // x = x XOR flag // 000...1...000 // (ako su razliciti rezultat je 1 ako su isti rezultat je 0 // iz maske 0^0 = 0 -- ne menja drugi argument ako je prvi 0 // iz maske 0^1 = 1 // iz maske 1^0 = 1 -- invertuje drugi argument ako je prvi 1 // iz maske 1^1 = 0 // provera da li je flag postavljen // x = x & flag // ako je rezultat 0 onda flag nije bio postavljen - false // ako je razlicit od 0 onda je bio postavljen - true // ako zelimo, mozemo iskombinovati flagove // i onda radimo sa vise flagova odjednom // f = f1 | f3 // disjunkcijom se dodaju novi flagovi bez problema int main(int argc, char* argv[]){ }