2014-09-09 3 views
0

Я пытаюсь сравнить два символа друг с другом, но рассматривая их как целые числа. Это значения структуры в связанном списке. Я распечатал temp->next->variable и temp->variable и подтвердил, что оператор if должен содержать ex: 3 > 2. Но я думаю, что это может не сработать, потому что они char.char to int in C со значениями структуры

Будут ли влиять на то, что они являются значениями char?

if(temp->next->variable > temp->variable) 
{ 
    .... 
} 
+2

'' 3 '>' 2'' верно, являются ли они символами или ints. но '' 6 '>' H'' будет ложным, так как это 'ascii (54)> ascii (72)' –

+2

Будьте осторожны, чтобы 'char' мог быть подписан или без знака в зависимости от того, где вы находитесь. – FatalError

+2

Короткий ответ: он будет работать – RockOnRockOut

ответ

0

Chars являются целыми числами длиной 8 бит, поэтому, если вы всегда рассматриваете символы как ints, это будет иметь точный характер, который вы желаете. Будьте осторожны, поскольку некоторые компиляторы разрешают char по умолчанию без знака, некоторые - к подписанному, что может создавать проблемы, казалось бы, случайным образом. (Если оба номера имеют одинаковый бит наивысшего порядка, это не повлияет, в противном случае результат будет противоположным тому, что вы ожидаете, если подписанность также противоположна тому, что вы ожидаете.)

Если вы рассматривая их как символы, тогда это даст вам их лексикографическое сравнение, основанное на внутреннем целочисленном представлении этого персонажа. Может быть, хорошо проверить, что такое ваш язык - будет ли ваша программа использовать таблицы поиска ASCII или Unicode 8-бит или что-нибудь еще.

Если у вас все еще есть скрытые проблемы, распространенная ошибка заключается в многоуровневых указателях, и хотя стрелка [->] используется повсюду, вам все равно придется применять де-ссылку [*], иначе вы тайно будет проверять их относительные местоположения в памяти.

0

Согласно стандарту C (6.5.8) Операторы отношения

3 Если оба операнда имеют арифметический тип, обычные арифметические преобразования выполняются.

обычных арифметические преобразования включает в себя продвижение целого числа, в частности, означает, что объекты типа char преобразуются в объекты типа int

Примите во внимание, что тип char может вести себя либо как тип unsigned char или signed char. Таким образом, вы можете получить разные результаты сравнения, если установлены знаковые биты объектов типа char.