Advertisement
VIKTOR21

Programiranje 25.3.2015

Mar 25th, 2015
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.25 KB | None | 0 0
  1. Operacije nad bitovima
  2.  
  3. p^1=-p
  4. 1^p=-p
  5. p^0=p
  6. 0^p=p
  7.  
  8. ------------------------------------------------------------------
  9.  
  10. << - siftovanje u lijevo
  11. >> - siftovanje u desno
  12.  
  13. shiftovanje u lijevu stranu <<
  14.  
  15. int x,y,k;
  16. x = 18;
  17. k = 3;
  18. 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 //
  19. // 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.
  20.  
  21. Siftovanje u desnu stranu >>
  22.  
  23. y=x>>k; // x - unsigned
  24. // 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
  25.  
  26.  
  27. x>>k za unsigned
  28.  
  29. x=150;
  30. 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
  31.  
  32.  
  33. x>>k za signed
  34.  
  35. x=-150;
  36. 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
  37.  
  38.  
  39.  
  40. primjer shiftovanja
  41.  
  42. #include <stdio.h>
  43. main ()
  44. {
  45. int x.y.k;
  46. x= -150;
  47. k=4;
  48. y= x>>k;
  49. printf("y=%d\n", y);
  50. }
  51.  
  52.  
  53. int x,y;
  54. x=0x7B49; // 0111 1011 0100 1001
  55. y=x & (1<<8); kada se siftuje bice 0000 0001 0000 0000
  56. rezultat je 0000 0001 0000 0000
  57.  
  58. & - operacija konjugcije
  59. << ima veci prioritet od &
  60.  
  61. Primjer za ovo gore
  62.  
  63. #include <stdio.h>
  64. main ()
  65. {
  66. int x,y;
  67. x=0x7B49;
  68. y=x & (1<<8);
  69. printf("y=%x\n", y);
  70. }
  71. -----------------------------------------------------------------------------
  72.  
  73. Operator dodjele u kombinaciji
  74.  
  75. = - operator dodjele
  76.  
  77. kombinacije sa
  78. aritmetickim operatorima +=, -=, *=, /=, %=
  79. operatorima siftovanja <<=, >>=
  80. bitovnim operatorima &=, |=, ^=
  81.  
  82. a+=b*c; // a= a+b*c
  83. a*=b+c; // a= a*(b+c)
  84.  
  85. #include <stdio.h>
  86. main ()
  87. {
  88. int a,b,c,d,e;
  89. a=7;
  90. b=13;
  91. c=10;
  92. d=15;
  93. e=6;
  94. a += b -= c *= d += e; // ovo racuna tako sto krene sa desne strane prvo pa ide nalevo
  95. printf("a,b,c,d,e=%d,%d,%d,%d,%d\n", a,b,c,d,e);
  96. }
  97.  
  98. ------------------------------------
  99.  
  100. Uslovni operator
  101.  
  102. oznacava se kao izr1 ? izr2 : izr3
  103.  
  104. 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
  105.  
  106. max(a,b)
  107. c= (a>b) ? a : b;
  108.  
  109. #include <stdio.h>
  110. main ()
  111. {
  112. float x,y;
  113. scanf("%f", &x);
  114. y= (x>= 0) ? x : -x;
  115. printf("y=%f\n" , y)
  116. }
  117.  
  118. #include <stdio.h>
  119. main ()
  120. {
  121. float x,y,z;
  122. scanf("%f%f", &x, &y);
  123. z= (x<y) ? x : y;
  124. printf("z=%f\n" ,z)
  125. }
  126.  
  127. ----------------------------------------------
  128. Prioritet operatora
  129.  
  130. !, ~, ++, --, -(promjena znaka), (cast), sizeof ako ih stoji vise u jednoj liniji racunaju se sa desna na lijevo
  131. *, /, % ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  132. +, - ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  133. <<, >> ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  134. <, <=, >, >= ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  135. ==, |= ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  136. & ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  137. ^ ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  138. | ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  139. && ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  140. | ako ih stoji vise u jednoj liniji racunaju se sa lijeva na desno
  141. ?: ako ih stoji vise u jednoj liniji racunaju se sa desna na lijevo
  142. =, +=, -=, *=, /= ... ako ih stoji vise u jednoj liniji racunaju se sa desna na lijevo
  143.  
  144. ------------------------------------------------------------------------
  145.  
  146. #include <stdio.h>
  147. main ()
  148. {
  149. int x,y;
  150. x= 7;
  151. y= x + 1 << 3;
  152. printf("y=%d\n" , y);
  153. }
  154.  
  155. #include <stdio.h>
  156. main ()
  157. {
  158. int x,y;
  159. x= 7;
  160. y= x + (1 << 3);
  161. printf("y=%d\n" , y);
  162. }
  163.  
  164. #include <stdio.h>
  165. main ()
  166. {
  167. int x,y,z,u;
  168. x= 12;
  169. y= 16;
  170. y= 8;
  171. u=(x++ > --y)? x * ++z : y-- * z;
  172. printf("x,y,z,u = %d,%d,%d,%dC" , x,y,z,u);
  173. }
  174.  
  175. #include <stdio.h>
  176. main ()
  177. {
  178. int x,y;
  179. x= 7;
  180. y= x + (1 << 3);
  181. printf("y=%d\n" , y);
  182. }
  183.  
  184. ---------------------------------------------------------------------
  185.  
  186.  
  187. Naredbe
  188.  
  189. naredba dodjele
  190. a=b+c;
  191.  
  192. scanf();
  193. printf();
  194.  
  195.  
  196.  
  197. Naredbe grananja
  198.  
  199. if naredba
  200.  
  201. if (izraz)
  202. naredba1;
  203. else
  204. naredba2;
  205.  
  206.  
  207. visina poreza
  208.  
  209. #include <stdio.h>
  210. main ()
  211. {
  212. double zarada, porez;
  213. printf("zarada = ");
  214. scanf("%lf", &zarada);
  215. if (zarada <= 40000)
  216. porez = zarada *15/100;
  217. else
  218. porez = 40000*15/100 + (zarada - 40000)*20/100;
  219. printf("porez = %lf\n", porez);
  220. }
  221.  
  222. min 2 broja
  223.  
  224. #include <stdio.h>
  225. main ()
  226. {
  227. int a,b,c;
  228. printf("a,b=")
  229. scanf("%d%d",&a, &b);
  230. if (a<b)
  231. c = a;
  232. else
  233. c = b;
  234. printf("min = %d\n", c);
  235. }
  236.  
  237.  
  238. min i max 2 broja
  239.  
  240. #include <stdio.h>
  241. main ()
  242. {
  243. int a,b,c,d;
  244. printf("a,b=")
  245. scanf("%d%d",&a, &b);
  246. if (a<b)
  247. {
  248. c = a;
  249. d = b;
  250. }
  251. else
  252. {
  253. c = b;
  254. d = a;
  255. }
  256. printf("min = %d\n", c);
  257. printf("max = %d\n", d);
  258. }
  259.  
  260. minimum 3 broja
  261.  
  262. #include <stdio.h>
  263. main ()
  264. {
  265. int a,b,c,d;
  266. printf("a,b,c=")
  267. scanf("%d%d%d",&a, &b, &c);
  268. if (a<b)
  269. if (a<c)
  270. d = a;
  271. else
  272. d = c;
  273. else
  274. if (d<c)
  275. d = b;
  276. else
  277. d = c;
  278. printf("max = %d\n", d);
  279. }
  280.  
  281.  
  282. maximum 4 broja
  283.  
  284. #include <stdio.h>
  285. main ()
  286. {
  287. int a,b,c,d,e;
  288. printf("a,b,c,d=")
  289. scanf("%d%d%d%d",&a, &b, &c, &d);
  290. e= a;
  291. if (b>e) e=b;
  292. if (c>e) e=c;
  293. if (d>e) e=d;
  294. printf("max = %d\n", e);
  295. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement