C (C++) egész konverzió. Ez mit jelent?
Kerninghtan: A C programozási nyelv c. könyv:
"Egészek konverziója
Bármely egész úgy konvertálódik egy adott előjel nélküli típussá, hogy megkeressük azt a legkisebb nem negatív értéket, amely az előjel nélküli típussal ábrázolható legnagyobb értéknél eggyel nagyobb modulussal kongruens az egész számmal."
Már az nagy segítség lenne ha elmondanátok ebben a mondatban mit jelent az hogy "modulus" és hogy "kongruens".
A kongruensre azt találtam hogy azonos, megegyezik, ez oké. De a modulusra csak a matematikai értelemben vett kongruenciát találom. Ez a idézett definíció beleillik ebbe:
?
Köszönöm, üdv
Márpedig neked a matematikai értelemben vett kongruencia kell, hiszen ez matek. Tehát ha az előjel nélküli egészed által ábrázolható legnagyobb érték 255, akkor 256 lesz a modulus. Olyan számot keresünk, ahol a kongruencia azonos erre a modulusra. Definíciót te idézted be. Ez pozitív számoknál praktikusan az osztási maradék.
Ha a 75-t akarjuk konvertálni előjel nélkülivé akkor a 75 lesz a legkisebb nemnegatív szám, aminek 75 % 256 == 75.
Ha a -100-t, akkor pedig a 156.
Ha a 257-t akkor az 1.
Szia!
1) modulus - mod (maradékos osztás)
2) kongruens - itt lineáris kongruencia, ld. [link] az első kifejezés szavakban: ax kongruens b-vel, modulo m
Szerintem ez a részlet, amit írtál, arra vonatkozik, hogy a compiler hogyan konvertál egy típust unsinged típussá. Ezt a fordító megoldja helyetted. Inkább a speciális esetek érdekesek, pl. ha két operandus típusa különbözik, akkor mi változik.
#@: Köszönöm a segítséged, de én ezt érteni akarom, nem mechanikusan átlépni rajta hogy "majd a fordító megcsinálja".
iostream: Én még nem tanultam sehol kongruenciarelációt, így előbb ezt tisztáznám le hogy jól értem-e.
Legyen a és b egész számok, továbbá m egész szám és m > 0, ahol m -et nevezzük a kongruencia modulusának.
A kongruenciareláció feltétele hogy m osztható (a-b) -vel (az "a" és a "b" szám KÜLÖNBSÉGÉVEL). A feltétel teljesülésekor az "a" m-el vett osztályi maradéka egyenlő a "b" m-el vett osztályi maradékával. Ekkor mondjuk hogy "a kongruens b-vel", és a kongruencia modulusa m.
A kérdés hogy ez az osztályi maradék mennyi lesz, wikipédia definíciójában ezt "k"-val jelöljük. Tehát létezik olyan k egész szám, hogy a feltételek teljesülése esetén
a = k * m + b
Tehát ha jól értelmezem, ennek az egésznek annyi a lényege hogy a é b számok között azt a "logikai kapcsolatot" vizsgáljuk, hogy egy m számmal osztva ugyanazt a maradékot adják.
Például.
(= jelenti a tripe bar-t, azaz a három vízszintes vonalat)
a = b (mod m)
5 = 2 (mod 3)
itt k=2 a közös maradék, de ellentmondás jön ki ha a k létezése képletbe helyettesítem:
5 = 2 * 3 + 2
Mielőtt folytatnám a típuskonverziót, mit nézek el?
Nagyon köszönöm mindkettőtök segítségét, üdv
az elejét elírtam
@2: köszönöm a ...
inkább fogd fel az egészet úgy, mintha folyamat in(/de)krementálnád a változódat, és a típus alsó/felső határánál "körbeér" (overflow/underflow), ezért egy 8bites egésznél 255+1=0, 255+5=4 (255,0,1,2,3,4), 4-6=-2=254 (4,3,2,1,0,255,254)
persze így sem sokkal érthetőbb, de legalább nyoma sincs a kongruenciának (illetve tök ugyanaz, csak intuitívan közelíted meg)
Szia, #2 vagyok.
a = k*m + b
pl.
5 = 2 (mod 3)
5 = k*3 + 2
k = 1 //azaz 5-ben 1-szer van meg a 3, maradék: 2
pl.
17 = 2 (mod 3)
17 = k*3 + 2
k = 5 //azaz 17-ben 5-ször van meg a 3, maradék: 2
Köszönöm #2, még erre visszatérek, csak 2 korrektálás a hozzászólásomba:
m osztóJA (nem osztható)
és osztáS* nem osztály
Ez pont csak egy túlcsordulás, semmi több, csak nagyon szabatosan meg van fogalmazva.
Egyébként a válaszomban szerepelt is ez a szó "(overflow/underflow)".
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!