Kezdőoldal » Számítástechnika » Programozás » C++-ban miért van signed char...

C++-ban miért van signed char és unsigned char? Mikor használjuk őket?

Figyelt kérdés

2016. máj. 8. 16:19
1 2 3
 1/24 anonim ***** válasza:
10%
Nemtom, mit mond a Gogel?
2016. máj. 8. 17:16
Hasznos számodra ez a válasz?
 2/24 A kérdező kommentje:

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.

2016. máj. 8. 18:53
 3/24 anonim ***** válasza:
Nem teljesen értem a problémádat. Ha tudod hogy a változó mérete 1 bájt, akkor miért csodálkozol hogy nem tudsz több mint 1 bájtnyi információt tárolni benne?
2016. máj. 8. 19:40
Hasznos számodra ez a válasz?
 4/24 A kérdező kommentje:

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.

2016. máj. 8. 21:19
 5/24 anonim ***** válasza:

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;

2016. máj. 8. 21:34
Hasznos számodra ez a válasz?
 6/24 A kérdező kommentje:
És ha a felhasználótól szeretném bekérni az értéket, akkor ezt hogy tudom megtenni?
2016. máj. 8. 22:10
 7/24 anonim ***** válasza:

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:

[link]


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).

2016. máj. 8. 22:12
Hasznos számodra ez a válasz?
 8/24 anonim ***** válasza:

É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.

2016. máj. 8. 23:59
Hasznos számodra ez a válasz?
 9/24 A kérdező kommentje:
Köszi a válaszokat! Szóval nem éri meg. De a kérdésem az lenne még, hogy ezért lett kitalálva az unsigned és signed char, hogy mégis meg lehessen tenni, vagy más egyéb okból?
2016. máj. 9. 12:45
 10/24 anonim ***** válasza:

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.

2016. máj. 9. 14:13
Hasznos számodra ez a válasz?
1 2 3

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!