Char și unsigned char [închis] (Inginerie software, C++, C)

căpitan a intrebat.

Unde este folosit unsigned char în C ( vă rugăm să spuneți câteva exemple reale )? De ce am avea nevoie atât de char cât și de unsigned char?

Char variază de la -127 la 128 ( număr întreg pe 8 biți ) Unsigned Char variază de la 0 la 255 ( număr întreg pe 8 biți )

Dacă scopul este de a stoca ASCII, de ce am avea nevoie de ambele?

O altă întrebare.Luați în considerare acest lucru:

char a = 127;
unsigned char b = 255;

Când tipăresc folosind std::cout. Acesta îmi oferă caractere diferite. Îmi puteți explica de ce?( folosesc compilatorul Microsoft vs11 )

user40980

Comentarii

  • Împărtășirea cercetărilor dvs. ajută pe toată lumea. Spune-ne ce ai încercat și de ce nu ți-a satisfăcut nevoile. Acest lucru demonstrează că v-ați făcut timp pentru a încerca să vă ajutați singur, ne scutește de a repeta răspunsuri evidente și, mai presus de toate, vă ajută să obțineți un răspuns mai specific și mai relevant. Consultați și Cum să întrebați –  > Por gnat.
  • @gnat Eram doar curios în legătură cu cele două tipuri de date. Un lucru pe care l-am constatat a fost că nu pot crea direct un std::string folosind unsigned char fără a folosi reinterpret_cast<const char *>. –  > Por căpitan.
  • Pentru informarea dvs. am căutat. Nu am găsit un exemplu din lumea reală în care unsigned char este util. –  > Por căpitan.
  • ei bine, un unsigned îți va permite să stochezi un număr mai mare decât un signed, dacă nu ești interesat de valori -ve. Imaginați-vă dacă ați avea un contor care să meargă de la 0 la 255, cu unsigned este ușor, cu signed este un pic mai dificil.  > Por PeteH.
  • S-ar putea să vă fie utilă această lectură: en.wikipedia.org/wiki/Extended_ASCII. –  > Por Blrfl.
3 răspunsuri
Frederik Deweerdt

Unde este folosit unsigned char în C ( vă rog să spuneți câteva exemple din lumea reală )?De ce am avea nevoie atât de char cât și de unsigned char?

signed sau unsigned sunt proprietăți ale diferitelor tipuri de date C (char, , short, , int, , etc…). Așadar, nu se pune problema dacă avem nevoie de ambele, ambele vin automat ca parte a modului în care este definit C.

Char variază de la -127 la 128 ( număr întreg pe 8 biți ) Unsigned Char variază de la 0 la 255 ( număr întreg pe 8 biți )

În timp ce acest lucru este valabil pentru majoritatea platformelor existente, nu există nimic care să garanteze că char va fi semnat. De fapt, pe platformele ARM, este unsigned. Vedeți această soluție: http://www.spinics.net/lists/linux-btrfs/msg20653.html ca un exemplu de eroare reală introdusă prin presupunerea că char este semnat.

Dacă scopul este de a stoca ASCII, de ce am avea nevoie de ambele?

Problema este că scopul nu este de a stoca ASCII. Se întâmplă să fie folosit pentru a stoca ASCII, dar nu este o necesitate.

char a = 127;

unsigned char b = 255;

Când îl tipăresc folosind std::cout. Îmi dă caractere diferite. Puteți explica de ce? ( Folosesc compilatorul Microsoft vs11.

Cred că ceea ce cauți este următorul lucru:

#include <iostream>

int main(void)
{
        char a = -1; 
        unsigned char b = 255;
        std::cout << a << std::endl << b << std::endl;
        return 0;
}

Acesta este ‘-1’ signed va fi egal cu ‘255’ unsigned. Vă rugăm să rețineți că acest lucru depinde foarte mult de implementare și nu există nimic care să garanteze că va funcționa pe toate platformele și compilatoarele.

M. Dudley

unsigned char stochează un număr. Îl puteți utiliza atunci când aveți nevoie să reprezentați numere în intervalul 0-255 și doriți să economisiți memorie.

Bart van Ingen Schenau

Ați uitat să menționați signed char, , care există și el și este distinct de char.

char are același interval ca și signed char sau unsigned char și este destinat utilizării pentru date de caractere (deși puteți utiliza doar codificări înguste, cum ar fi ASCII, dacă doriți corespondența dintre 1 char == 1 caracter).

În ciuda utilizării lui char în denumirile lor, atât signed char și unsigned char sunt nu sunt sunt destinate datelor de caractere, ci mai degrabă pentru a conține numere mici. unsigned char în special este adesea utilizat pentru a stoca date brute de octeți.

Comentarii

Tags: