Если 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 гарантирует, что переменная будет иметь именно ту разрядность, что указано - никаких проблем с переносимостью!
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Карма: 67
Рейтинг сообщений: 1065
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19892 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Разница в "умолчаниях". По умолчанию тип char (также как и int) знаковый, но можно это принудительно указать компилятору: signed char.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
так в чем разница? оба типа - знаковые 8битные целочисленные переменные.
Это зависит от реализации компилятора. Например, в IAR C тип char по умолчанию беззнаковый. Чтобы сделать его знаковым, нужно изменить настройки компилятора:
Карма: 67
Рейтинг сообщений: 1065
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19892 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Цитата:
Цена: 70 122 руб.
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
понятно. значит просто буду ВСЕГДА явно указывать signed или unsigned для переменных.
Да, так вернее будет. Но можно просто узнать про типы своего компилятора. А то можно далеко зайти. Согласно правилам MISRA, базовые типа char, int, short, long, float, double вообще не должны использоваться. Вместо них для определенного компилятора директивами typedef должны быть определены и использованы имена типов эквивалентной длины. Например, UI_8, SI_16 и т.д. Но жить по таким правилам скучно, нет огонька, задора, ночей отладки!
Карма: 67
Рейтинг сообщений: 1065
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19892 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
lix писал(а):
поди в белорусских рублях?
Уффф... наверняка
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Согласен со всем текстом, кроме маленького уточнения:
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...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения