C++-ban miért van signed char és unsigned char? Mikor használjuk őket?
Nos, a google nagyjából azt mondja, hogyha karakterek tárolására akarom használni, akkor használjam sima char-ként, ha pedig számok tárolására, akkor használjak unsigned vagy signed chart. Ezek mérete elvileg 1 bájt, vagyis -128-tól 127-ig, vagy 0-tól 255-ig.
Viszont nekem cinnel 1 karakternél többet akkor sem sikerül beolvasni se egy signed, se egy unsigned charba.
Nem tudom, hogy én magyarázok ennyire rosszul, vagy szeretnek az emberek trollkodni.
Az a bajom, hogy hiába definiálok unsigned vagy signedként egy char típusú változót, attól még ugyanúgy viselkedik, mint egy sima char típusú változó. Arra gondoltam, hogy ekkor számokat lehetne bennük tárolni (olyan számokat is, amik nem 1 karakterből állnak, pl 255 vagy 127), nem pedig karaktereket, mint egyébként. Reméltem, hogy valaki elmagyarázza, mert googleben rákeresve sem találtam pontos válaszokat.
char-ban bármikor tudsz számokat tárolni, igen olyat is, ami nem csak egy jegy hosszú.
Nem értem, mi okozza a gondot?
char ch = 94;
Azt hiszem sejtem a problémád.
A char 1 bájt méretű, egész szám tárolására alkalmas típus. Egy egész szám lehet signed ami előjeles és az unsigned ami előjel nélküli. Ha nem írod ki elé hogy signed vagy unsigned akkor az azt jelenti hogy nem számít, mert nem fogsz rajta végezni aritmetikai műveleteket.
A betű egy szám a számítógép számára ami normális esetben 1 bájt, innen is ered a char név. 1 bájt méretű karakterek tárolására is alkalmas. Itt meg tudod nézni hogy milyen betűhöz milyen szám tartozik:
Amikor azt mondod hogy decimális 119 az lehet egy szám is és lehet a 'w' betű is, ezt te döntöd el amikor kiírod a képernyőre, a számítógép nem tesz köztük különbséget.
A 119 nem 3 karakter hanem 1 szám. Ha 3 karakterként akarod kezelni akkor ahhoz 3 char kell ami tárolja a karakterekhez tartozó értékeket ami a "119" esetében 49,49,57 (lásd a linkelt ASCII táblát).
Értem a problémád, a válasz röviden: Nem szoktunk közvetlenül char-ba olvasni, mert macera. A helyzet a következő: Amikor beolvasol cin-el, akkor hiába írsz mondjuk 120-at, az szövegként fogja beolvasni, és a char változód az 1-est, mint karaktert fogja megkapni. C++ megoldás erre az, ha nem char-ba ovlasol be, hanem vagy egy int változóba, vagy egy string-be / karaktertömbbe, amiből aztán átkonvertálod a beolvasott értéket char-ba. macerás. Alternatív megoldás, ha az alap C-s scanf() metódust használod a következőképpen: scanf("%d",&ch)
A "%d" adja meg neki, hogy a beolvasott értéket alakítsa integerré, majd a második paraméterben lévő ch char típusú változónak átadja a számmá alakított értéket. Így lehet megoldani, szóval a legkisebb túlzás nélkül mondom: Nem éri meg char-ba olvasni számot.
Leginkabb ott hasznaljak ezeket, ahol keves a rendelkezesre allo memoria: beagyazott rendszerek, hobbiszinten Arduino.
Ha egy ciklussal 200-ig szeretnel menni, akkor nem kell 2 bajtot foglalni.
Az asztali gepeken kb. mindenhol hasznalhatsz long long intet is, a heap sose, a stack pedig nagyon ritkan fog betelni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, 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!