2012-12-10 16 views
6

Napisałem następujący kod:1 bajt typ danych Integer

#include <iostream> 
#include <iomanip> 
#include <stdint.h> 

using namespace std; 

int main() 
{ 
    uint8_t c; 

    cin >> hex >> c; 
    cout << dec << c; 

    return 0; 
} 

ale kiedy wejście c — hex do 12 — wyjście jest również c. Spodziewałem 12. Później dowiedziałem się, że:

uint8_t jest zwykle typedef dla unsigned char. Tak naprawdę to czyta c jako ASCII 0x63.

Czy istnieje 1-bajtowa liczba całkowita, która zachowuje się jako liczba całkowita podczas wykonywania operacji we/wy, a nie jako znak?

+1

No nie ma, co jest wstyd –

Odpowiedz

4

Nie to, co wiem.

Można wykonać operacje we/wy za pomocą szerszego typu całkowitoliczbowego i odpowiednio zastosować sprawdzanie zasięgu i rzutowanie.

1

Obawiam się, że nie wiem o sposób, albo, ale czytając numer szesnastkowy do całkowitej typu mogą być osiągnięte w sposób następujący:

#include <iostream> 
using namespace std; 

int main() { 
    short c; 
    cin >> std::hex >> c; 
    cout << c << endl; 
    return 0; 
} 
Powiązane problemy