2013-04-27 5 views
0

Почему я не могу проверить значение ASCII, которое я присвоил символу (250) в этом коде? Кажется странным тестировать -6, если это не то, что я назначил символу.Расширенный символ ASCII C++

#include <iostream> 

using namespace std; 

int main() 
{ 

    char symbol = 250; // dot symbol 

    int a = symbol; 

    cout << symbol << endl; // Outputs dot symbol 

    cout << a << endl; // Outputs -6 

    if(symbol == 250) 
     cout << "250 works"; 

    if(symbol == -6) 
     cout << "-6 works"; // -6 test works 

    return 0; 
} 
+1

Есть ли причина, по которой вы не просто используете 'symbol == '.''? – Swiss

+0

250 просто случается, что я использую, и у меня есть еще несколько персонажей из расширенного ASCII в моей большей части кода. – user2325692

ответ

6

подписан на вашей платформе. 250 выходит за пределы допустимого знака. Вы хотите:

if (symbol == static_cast<char>(250)) 

В противном случае symbol будет повышен до целого числа. В качестве альтернативы используйте unsigned char вместо char, который может быть подписан или не подписан.

+0

Спасибо. Я действительно не знаю разницы между подписанными и неподписанными типами данных, но, по крайней мере, я знаю, что существует разница в диапазоне. – user2325692

+0

Для неподписанного типа данных с одинаковой шириной для знака используется один бит. Таким образом, однобайтовый unsigned может идти от 0 до 255, а однобайтовый подписанный может идти от -128 до 127. В C++ простой старый символ может быть либо подписанным, либо беззнаковым. Если это важно для вашего кода, то лучше указать тот, который вы ожидаете. –

Смежные вопросы