Professional Documents
Culture Documents
Ea04 Handout
Ea04 Handout
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 1 / 34
Gyakorló feladatok Aritmetikai típusok
Tartalom
Bevezetés Valósak
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 2 / 34
Gyakorló feladatok Aritmetikai típusok
1. fejezet
Gyakorló feladatok
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 3 / 34
Gyakorló feladatok Aritmetikai típusok
1. Gyakorló feladat
Írjon C programot, mely egy egész számot (R ) olvas be a standard
bemenetr®l, majd a standard kimeneten megjelenít egy 10 × 10
mez® méret¶ karakterábrát.
#######...
#######...
#######...
######....
######....
#####.....
###.......
..........
..........
..........
Megoldás
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 4 / 34
Gyakorló feladatok Aritmetikai típusok
2. Gyakorló feladat
Megoldás
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 5 / 34
Gyakorló feladatok Aritmetikai típusok
3. Gyakorló feladat
Megoldás
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 6 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
2. fejezet
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 7 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Típusok Bevezetés
A típus
Értékkészlet
M¶veletek
Ábrázolás
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 8 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
A C nyelv típusai
void
skalár
aritmetikai
egész: integer, karakter, felsorolás
lebeg®pontos
mutató
függvény
union
összetett
tömb
struktúra
Ma ezekr®l lesz szó
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 9 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
dec 2
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 hex
0 0 0 0 0 0 0 0 0 0x00
1 0 0 0 0 0 0 0 1 0x01
2 0 0 0 0 0 0 1 0 0x02
3 0 0 0 0 0 0 1 1 0x03
. . . .
. . . .
. . . .
127 0 1 1 1 1 1 1 1 0x7F
128 1 0 0 0 0 0 0 0 0x80
129 1 0 0 0 0 0 0 1 0x81
. . . .
. . . .
. . . .
253 1 1 1 1 1 1 0 1 0xFD
254 1 1 1 1 1 1 1 0 0xFE
255 1 1 1 1 1 1 1 1 0xFF
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 10 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
A túlcsordulás (overow)
overow
11..11 00..00
11..10 00..01
255 0 8 biten ábrázolt el®jel
254 1 00..10
nélküli számok esetén
2
00..11 255+1 = 0
3 255+2 = 1
2-3 = 255
modulo 256 aritmetika
Mindig csak az
eredmény 256-tal vett
maradékát látom
129
128 127
10..01
10..00 01..11
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 11 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
dec 2
7 2
6 2
5 2
4 2
3 2
2 2
1 2
0 hex
0 0 0 0 0 0 0 0 0 0x00
1 0 0 0 0 0 0 0 1 0x01
2 0 0 0 0 0 0 1 0 0x02
3 0 0 0 0 0 0 1 1 0x03
. . . .
. . . .
. . . .
127 0 1 1 1 1 1 1 1 0x7F
−128 1 0 0 0 0 0 0 0 0x80
−127 1 0 0 0 0 0 0 1 0x81
. . . .
. . . .
. . . .
−3 1 1 1 1 1 1 0 1 0xFD
−2 1 1 1 1 1 1 1 0 0xFE
−1 1 1 1 1 1 1 1 1 0xFF
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 12 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
A túlcsordulás (overow)
11..11 00..00
11..10 00..01
−1 0
−2 1 00..10
2
00..11 8 biten ábrázolt el®jeles
3
számok esetén
127+1 = -128
127+2 = -127
-127-3 = 126
viszont
−127 126 2-3 = -1
−128 127
10..01 01..10
10..00 01..11
overow
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 13 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
típus bit1
<limits.h> printf
signed char 8 CHAR_MIN CHAR_MAX %hhd2
unsigned char 8 0 UCHAR_MAX %hhu2
signed short int 16 SHRT_MIN SHRT_MAX %hd
unsigned short int 16 0 USHRT_MAX %hu
signed int 32 INT_MIN INT_MAX %d
unsinged int 32 0 UINT_MAX %u
signed long int 32 LONG_MIN LONG_MAX %ld
unsigned long int 32 0 ULONG_MAX %lu
signed long long int 2
64 LLONG_MIN LLONG_MAX %lld
unsigned long long int 2
64 0 ULLONG_MAX %llu
1
Tipikus értékek, a szabvány csak a minimumot írja el®
2
C99 szabvány óta
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 14 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Egészek deklarációja
Alapértelmezések
A signed el®jelmódosító elhagyható
1 int i; /* signed int */
2 long int l ; /* signed long int */
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 15 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Egész típusok
11 return 0;
12 } link
Egész számkonstansok
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 17 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
15 15!
=
12 12! · (15 − 12)!
15 · 14 · 13 2730
= = 455
3 ·2·1 6
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 18 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Kód 00 10 20 30 40 50 60 70
+00 NUL DLE 0 @ P ` p
+01 SOH DC1 ! 1 A Q a q
+02 STX DC2 " 2 B R b r
+03 ETX DC3 # 3 C S c s
+04 EOT DC4 $ 4 D T d t
+05 ENQ NAK % 5 E U e u
+06 ACK SYN & 6 F V f v
+07 BEL ETB ' 7 G W g w
+08 BS CAN ( 8 H X h x
+09 HT EM ) 9 I Y i y
+0a LF SUB * : J Z j z
+0b VT ESC + ; K [ k {
+0c FF FS , < L \ l |
+0d CR GS - = M ] m }
+0e SO RS . > N ^ n ~
+0f SI US / ? O _ o DEL
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 19 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
kiíratás/beolvasás %c formátumkóddal
A program kimenete
97: a
98: b
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 20 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Karakterkonstansok
97: a
98: b
Vigyázat! '0' ̸= 0 !
48: 0
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 21 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Karakterkonstansok
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 22 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 23 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
M¶veletek karakterekkel
1 char c ;
2 int sum = 0;
3 do
4 {
5 scanf ( " % c " , & c ); /* beolvas á s */
6 if ( c >= '0 ' && c <= '9 ') /* ha sz á mjegy */
7 sum = sum + (c - '0 '); /* ö sszegz é s */
8 }
9 while ( c != '\ n '); /* le á ll á si felt é tel */
10 printf ( " Az ö sszeg : % d \ n " , sum );
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 24 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
M¶veletek karakterekkel
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 25 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Lebeg®pontos típusok
Normálalak
Normálalak ábrázolása
Lebeg®pontos tört = el®jelbit + mantissza + exponens
1 el®jelbit: 0pozitív, 1negatív
2 mantissza: el®jel nélküli egész (a tizedesvessz®t elhagyva),
normalizálás miatt az els® számjegy ≥ 1
3 exponens (másként karakterisztika): el®jeles egész
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 26 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Lebeg®pontos típusok
Bináris normálalak
0 0100 010
4
implicit bites ábrázolás
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 27 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
tipikus értékek
típus bitszám mantissza exponens printf/scanf
float 32 bit 23 bit 8 bit %f
double 64 bit 52 bit 11 bit %f/%lf
long double 128 bit 112 bit 15 bit %Lf
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 28 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
0 1 2 3 4 5 6
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 29 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
jelen példában
A mantissza (abszolút) ábrázolási pontossága 1/16
20 exponens mellett az ábrázolási pontosság 1/16
210 exponens mellett az ábrázolási pontosság 210 /16 = 64
Nem beszélhetünk abszolút, csak relatív ábrázolási
pontosságról, ami jelen esetben 3 bit.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 30 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
22 3 25
+ ̸=
7 7 7
helyette
22 3 25
+ − <ε
7 7 7
A + a − A ̸= a
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 31 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
0,1d = 0,00011b
1 double d ;
2 for (d = 0.0; d < 1.0; d = d +0.1) /* 10? 11? */
3 {
4 ...
5 }
Helyesen:
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 32 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
hibás:
1 double d = 3 / 2;
2 long long int c = 500000 * 500000;
helyesen:
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 33 / 34
Gyakorló feladatok Aritmetikai típusok Bev. Egészek Karakterek Valósak
Köszönöm a gyelmet.
© Farkas B., Fiala P., Vitéz A., Zsóka Z. A C nyelv aritmetikai típusai. 2021. szeptember 28. 34 / 34