Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Operacije nad bitovima
- p^1=-p
- 1^p=-p
- p^0=p
- 0^p=p
- ------------------------------------------------------------------
- << - siftovanje u lijevo
- >> - siftovanje u desno
- shiftovanje u lijevu stranu <<
- int x,y,k;
- x = 18;
- k = 3;
- y = x<<k; // ako je x zapisano kao bm1bm2bm3......bm3bm2bm1bm0 onda se sve pomijera lijevo za k mijesta znaci prvi bitovi se izbacuju za k mjesta a na kraju se dodaju 0 za k mjesta //
- // za ovaj zadatak broj 18 se prevodi u binarni sistem 18 = 10010 posle siftovanja dobija se 10010000 = 144 sto je 18*2^3 to jeste mnozi se broj sa 2 na k.
- Siftovanje u desnu stranu >>
- y=x>>k; // x - unsigned
- // x bm1bm2bm3.....bm3bm2bm1bm0 pomera se u desno za k mjesta tako da rezultat buude 00000bm-1...bk+2bk+1bk znaci desni se izbace za k mjesta a sa lijeve strane dodaju se 0 za k mjesta a kada je x signed onda se samo sa lijeve strane dodaju bm-1 (prvi krajnji bit) za k mjesta
- x>>k za unsigned
- x=150;
- y=x>>3; // x= 10010110 nakon pomijeranja za 3 mjesta dobije se 00010010 = 18 odnosno to je kao 150/2^3 tj dijeljenje sa 2 na k
- x>>k za signed
- x=-150;
- y=x>>4; // x= 10010110 i uradi se drugi komplement i to bude 1...11101101010 i shiftovanjem dobije se 110110=-10 radi provjere to se ponovo komlementuje 001010 ponovo se moze dobiti kao x/2^k
- primjer shiftovanja
- #include <stdio.h>
- main ()
- {
- int x.y.k;
- x= -150;
- k=4;
- y= x>>k;
- printf("y=%d\n", y);
- }
- int x,y;
- x=0x7B49; // 0111 1011 0100 1001
- y=x & (1<<8); kada se siftuje bice 0000 0001 0000 0000
- rezultat je 0000 0001 0000 0000
- & - operacija konjugcije
- << ima veci prioritet od &
- Primjer za ovo gore
- #include <stdio.h>
- main ()
- {
- int x,y;
- x=0x7B49;
- y=x & (1<<8);
- printf("y=%x\n", y);
- }
- -----------------------------------------------------------------------------
- Operator dodjele u kombinaciji
- = - operator dodjele
- kombinacije sa
- aritmetickim operatorima +=, -=, *=, /=, %=
- operatorima siftovanja <<=, >>=
- bitovnim operatorima &=, |=, ^=
- a+=b*c; // a= a+b*c
- a*=b+c; // a= a*(b+c)
- #include <stdio.h>
- main ()
- {
- int a,b,c,d,e;
- a=7;
- b=13;
- c=10;
- d=15;
- e=6;
- a += b -= c *= d += e; // ovo racuna tako sto krene sa desne strane prvo pa ide nalevo
- printf("a,b,c,d,e=%d,%d,%d,%d,%d\n", a,b,c,d,e);
- }
- ------------------------------------
- Uslovni operator
- oznacava se kao izr1 ? izr2 : izr3
- x= izr1 ? izr2 : izr3; // prvo se izracuna izr1 ako je razlicito od 0 (true) racuna se izr2 i dodijeluje se x, a ako je izr = 0 (false) onda se racuna izr3 i to se dodijeljuje x
- max(a,b)
- c= (a>b) ? a : b;
- #include <stdio.h>
- main ()
- {
- float x,y;
- scanf("%f", &x);
- y= (x>= 0) ? x : -x;
- printf("y=%f\n" , y)
- }
- #include <stdio.h>
- main ()
- {
- float x,y,z;
- scanf("%f%f", &x, &y);
- z= (x<y) ? x : y;
- printf("z=%f\n" ,z)
- }
- ----------------------------------------------
- Prioritet operatora
- !, ~, ++, --, -(promjena znaka), (cast), sizeof ako ih stoji vise u jednoj liniji racunaju se sa desna na lijevo
- *, /, % ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- +, - ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- <<, >> ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- <, <=, >, >= ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- ==, |= ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- & ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- ^ ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- | ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- && ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- | ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
- ?: ako ih stoji vise u jednoj liniji racunaju se sa desna na lijevo
- =, +=, -=, *=, /= ... ako ih stoji vise u jednoj liniji racunaju se sa desna na lijevo
- ------------------------------------------------------------------------
- #include <stdio.h>
- main ()
- {
- int x,y;
- x= 7;
- y= x + 1 << 3;
- printf("y=%d\n" , y);
- }
- #include <stdio.h>
- main ()
- {
- int x,y;
- x= 7;
- y= x + (1 << 3);
- printf("y=%d\n" , y);
- }
- #include <stdio.h>
- main ()
- {
- int x,y,z,u;
- x= 12;
- y= 16;
- y= 8;
- u=(x++ > --y)? x * ++z : y-- * z;
- printf("x,y,z,u = %d,%d,%d,%dC" , x,y,z,u);
- }
- #include <stdio.h>
- main ()
- {
- int x,y;
- x= 7;
- y= x + (1 << 3);
- printf("y=%d\n" , y);
- }
- ---------------------------------------------------------------------
- Naredbe
- naredba dodjele
- a=b+c;
- scanf();
- printf();
- Naredbe grananja
- if naredba
- if (izraz)
- naredba1;
- else
- naredba2;
- visina poreza
- #include <stdio.h>
- main ()
- {
- double zarada, porez;
- printf("zarada = ");
- scanf("%lf", &zarada);
- if (zarada <= 40000)
- porez = zarada *15/100;
- else
- porez = 40000*15/100 + (zarada - 40000)*20/100;
- printf("porez = %lf\n", porez);
- }
- min 2 broja
- #include <stdio.h>
- main ()
- {
- int a,b,c;
- printf("a,b=")
- scanf("%d%d",&a, &b);
- if (a<b)
- c = a;
- else
- c = b;
- printf("min = %d\n", c);
- }
- min i max 2 broja
- #include <stdio.h>
- main ()
- {
- int a,b,c,d;
- printf("a,b=")
- scanf("%d%d",&a, &b);
- if (a<b)
- {
- c = a;
- d = b;
- }
- else
- {
- c = b;
- d = a;
- }
- printf("min = %d\n", c);
- printf("max = %d\n", d);
- }
- minimum 3 broja
- #include <stdio.h>
- main ()
- {
- int a,b,c,d;
- printf("a,b,c=")
- scanf("%d%d%d",&a, &b, &c);
- if (a<b)
- if (a<c)
- d = a;
- else
- d = c;
- else
- if (d<c)
- d = b;
- else
- d = c;
- printf("max = %d\n", d);
- }
- maximum 4 broja
- #include <stdio.h>
- main ()
- {
- int a,b,c,d,e;
- printf("a,b,c,d=")
- scanf("%d%d%d%d",&a, &b, &c, &d);
- e= a;
- if (b>e) e=b;
- if (c>e) e=c;
- if (d>e) e=d;
- printf("max = %d\n", e);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement