Если c!=A то нужно чтобы результат был 0, если c=A то результат должен быть A
либо нашли не то, что хотели.
A ^ B даст 0, если A == B и кашу, если A != B.
Это просто побитовое сравнение, в каждом бите 0 при совпадении соответствующих битов, 1 при несовпадении.
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
signed char - работает правильно. Спасибо. кстати, а чем отличаются char и signed char? оба типа, это 8 битные переменные со значением от -128 до 127. чета в книжках этот вопрос не рассматривается, просто говорится что есть char и signed char, и все.....
считаю это не совсем адекватной реакцией.. если бы тебе нужна была помощь в delphi, php, css, ps, sql, ai, javascript, 3dmax, solidworks и т.д. и т.п. где я бы мог дать совет - я бы не стал смеятся над твоими попытками изучить что то новое и полезное.. у тебя то что я просил помощи заняло бы минуты 2-3..
кстати, а чем отличаются char и signed char? оба типа, это 8 битные переменные со значением от -128 до 127. чета в книжках этот вопрос не рассматривается, просто говорится что есть char и signed char, и все.....
вопрос этот рассматривается и весьма четко на нем заостряется внимание: тип char по стандарту Си - это знаковый тип, т.е. число со знаком. однако, так как нет отдельного типа для обычного байтового числа без знака, многие компиляторы отступают от стандарта и считают char беззнаковым. то есть фактически наличие или отсутствие знака у char определяется реализацией конкретного компилятора. об этом всегда напоминают, в каждом компиляторе есть опция "переключения" char-а со знаковго на беззнаковый и наоборот... короче говоря, идет путаница.
однако, есть простой способ путаницы избежать, не взирая на компиляторы: надо всегда явно указывать наличие или отсутствие знака у переменных типа char: signed char - для знаковых unsigned char - для беззнаковых просто charне использовать вообще или использовать только для строковых переменных.
в этом случае можно гарантировать, что любой компилятор поймет программу правильно и однозначно. аналогичная неоднозначность имеется и с типом int и его производными - стандарт оговаривает только соотношение между int и long int (long в 2 раза длиннее int) или иные комбинации, но вот размер самого int определяется платформой: для AVR int занимает 16 бит, для компьютера - 32 бита, есть и варианты в 64 бита... таким образом, путаница и проблемы могут быть и тут...
в частности, более продвинутые стандарты Си, например, С99, уже вводит и рекомендует использовать вместо неоднозначных типов другие: uint8_t - беззнаковое 8-битное число int8_t - 8-битное со знаком число uint16_t - 16-битное без знака int16_t - 16-битное со знаком и т.д.
использование этих типов совместно с компиляторами, поддерживающими С99 гарантирует, что переменная будет иметь именно ту разрядность, что указано - никаких проблем с переносимостью!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
так в чем разница? оба типа - знаковые 8битные целочисленные переменные.
Это зависит от реализации компилятора. Например, в IAR C тип char по умолчанию беззнаковый. Чтобы сделать его знаковым, нужно изменить настройки компилятора:
понятно. значит просто буду ВСЕГДА явно указывать signed или unsigned для переменных.
Да, так вернее будет. Но можно просто узнать про типы своего компилятора. А то можно далеко зайти. Согласно правилам MISRA, базовые типа char, int, short, long, float, double вообще не должны использоваться. Вместо них для определенного компилятора директивами typedef должны быть определены и использованы имена типов эквивалентной длины. Например, UI_8, SI_16 и т.д. Но жить по таким правилам скучно, нет огонька, задора, ночей отладки!
Согласен со всем текстом, кроме маленького уточнения:
ARV писал(а):
тип char по стандарту Си - это знаковый тип, т.е. число со знаком.
В отличие от int, short int, long int, которые бывают только знаковые или беззнаковые, типов char аж три
Цитата:
There are three character types, designated as char, signed char, and unsigned char.
От типа char требуется только то, чтобы в него влазили все символы из набора целевой машины, при этом базовый набор символов, прописанный как обязаельный в стандарте языка С — должен представяться положительным значением, остальные — как удобно.
Цитата:
An object declared as type char is large enough to store any member of the basic execution character set. If a member of the required source character set enumerated in $2.2.1 is stored in a char object, its value is guaranteed to be positive. If other quantities are stored in a char object, the behavior is implementation-defined: the values are treated as either signed or nonnegative integers.
И только потом вводится знаковый char вместе с остальными знаковыми тиами
Цитата:
There are four signed integer types, designated as signed char, short int, int, and long int. An object declared as type signed char occupies the same amount of storage as a ``plain'' char object.
и беззнаковый char вместе с остальными беззнаковыми типами
Цитата:
For each of the signed integer types, there is a corresponding unsigned integer type that uses the same amount of storage (including sign information) and has the same alignment requirements.
Таким образом, компиляторы не
ARV писал(а):
отступают от стандарта и считают char беззнаковым. то есть фактически наличие или отсутствие знака у char определяется реализацией конкретного компилятора
а пользуются явным разрешением на implementation-defined знаковость "просто char".
p.s. Цитаты из стандрта С 1989-го года, в C99 то же самое.
_________________ Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
ага. переменные int прекрасно работали беззнаковыми переменными без всяких signed , а вот переменные char в кодевижн требуют обязателно signed
int прекрасно работали беззнаковыми, пока не было попытки записать в них беззнаковое число 50000 например вот тут-то они бы и подкачали - стали знаковыми
а в настройках CodeVision вы поковыряйтесь - где-то наверняка галочку можно снять/поставить, и char станет signed...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения