File: Stare vježbe/vjezbe02/09__aritmetika_razliciti.c

  1. /*
  2.   09__aritmetika_razliciti.c
  3.   Djelovanje aritmetickih operatora na razlicitim tipovima
  4.   Implicitne i eksplicitne konverzije
  5. */
  6.  
  7. #include <stdio.h>
  8.  
  9. int main ()
  10. {
  11. int i=2, j=5, k;
  12. float f=9.876, g;
  13. double d=1.234;
  14.  
  15. /* zbrojimo dvije varijable tipa int i pridruzimo je varijabli
  16.   tipa float */
  17. g=i+j;
  18. printf("g=i+j: %g\n", g);
  19. /* podijelimo dvije varijable tipa int i pridruzimo je varijabli
  20.   tipa float */
  21. g=i/j;
  22. printf("g=i/j: %g\n", g);
  23. /* zakljucak: prvo se izvedu aritmeticke operacije,
  24.   te se nakon toga izvrsi implicitna konverzija */
  25.  
  26. /* da bismo dobili zeljeni rezultat i/j potrebno je izvrsiti
  27.   eksplicitnu konverziju jednog od operanada na
  28.   tip float ili double */
  29. /* eksplicitna konverzija vrsi se pomocu cast operatora */
  30. g=(float)i/j;
  31. printf("g=(float)i/j: %g\n", g);
  32.  
  33. /* u slijedecem primjeru prvo se float konvertira u double,
  34.   dva doublea se zbroje, te se nakon toga dobiveni double
  35.   konvertira (s gubitkom!) u int (jer je varijabla k tipa int) */
  36. k=f+d;
  37. printf("k=f+d: %d\n", k);
  38.  
  39. f=0.7;
  40. g=0.8;
  41. /* prvo se sve tri varijable zbroje kao doubleovi (dakle, doslo je
  42.   do implicitne konverzije varijabli f i i u double), te se nakon toga
  43.   dobiveni rezultat kovertira u int */
  44. k=f+g+i;
  45. printf("%d\n", k);
  46. /* prvo se varijable f i g eksplicitno konvertiraju u int, te dani
  47.   zbroj intova bez gubitka sprema u varijablu k (koja je tipa int) */
  48. k=(int)f+(int)g+i;
  49. printf("%d\n", k);
  50.  
  51. return 0;
  52. }
  53.