2016-04-10 15 views
1

當我使用char數據類型添加兩個數字時,我得到了字符的ASCII碼的總和,而不是數字本身。當我在互聯網上進行研究時,各個網站都說char類型確實可以用來處理一個字節的數字。但實際上,我得到了ASCII值的總和。這是爲什麼發生?下面只是一個示例代碼,說明了這個問題:如何將char數據類型用作數字而不是字符?

uint8_t rows,cols; //uint8_t is just a typedef for char 
cin >> rows; 
cout << rows + 1 << endl; 
+0

「而不是數字本身「。你究竟是什麼意思?你的意思是A等於1而B等於2?你能否詳細說明一下 –

回答

2

當人們談論「一個字節的數字」,他們談論的8位值,範圍從-128到127的char,或0到255的unsigned char,也被稱爲八位字節。這些都可以直接轉換爲更大的整數類型和花車:

char eight_bit = 122; 
float floating_point = eight_bit; // = 122.0 

如果你想一個數字值,如'1'轉換成它所代表的數值,有stoi

#include <string> 

int ctoi(char c) { 
    std::string temp; 
    temp.push_back(c); 
    return std::stoi(temp); 
} 
0

字符存儲一個字符的ASCII等價物作爲整數。

例如

char value = 'A' // == int 65 

這是你最好使用短整型來存儲數字,但如果你真的想,你可以做這樣的事情;

char value1 = '2'; 
char value2 = '5'; 
char sum = (value1 + value2) - '0'; // int value of sum would be 7 
0

當您使用char時,使用帶符號的8位數據類型(主要是)。

只有因爲std::cout被編程爲顯示char作爲ASCII字符,您纔會得到「ASCII總和」。

嘗試

cout << stratic_cast<int16_t>(rows) + 1 << endl; 

而且你會看到你得到「數」,而不是「ASCII字符」。

uint8_t不(或可能不應該),因爲charchar被定義爲簽署數據類型,而uint*代表無符號

相關問題