Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение avreal »

Вы либо просили не то, что хотели
T0lik писал(а):Если c!=A то нужно чтобы результат был 0, если c=A то результат должен быть A
либо нашли не то, что хотели.

A ^ B даст 0, если A == B и кашу, если A != B.

Это просто побитовое сравнение, в каждом бите 0 при совпадении соответствующих битов, 1 при несовпадении.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
V2oD2o
Встал на лапы
Сообщения: 90
Зарегистрирован: Чт дек 09, 2010 12:03:08
Откуда: Зеленоград
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение V2oD2o »

всем мяу!

напишите пожалуйста полный исходник на С банальной программки:

pic16f84

Изображение

как взять сигнал с A0, и через B0 его выдать?

прям вот чтоб компилировать можно было и прошить, если не сложно.. помогите..
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Re: Вопросы по С/С++ (СИ)

Сообщение asteroid7 »

V2oD2o писал(а):...напишите пожалуйста полный исходник на С банальной программки...

Вот и выросло новое поколение...
Печально...
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение O-LED »

Други помагайте. написал функцию вычисления абсолютного значения числа.
функция-

Код: Выделить всё

char abs (char x)
{
if (x<0) x=x*(-1);
return x;
}
Почему

Код: Выделить всё

abs(-11);
возвращает 245 а не 11
KIT
Аватара пользователя
Liv
Вымогатель припоя
Сообщения: 525
Зарегистрирован: Сб сен 20, 2008 12:12:30
Откуда: Minsk
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Liv »

Вероятно, нужно использовать тип signed char.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение O-LED »

signed char - работает правильно. Спасибо.
кстати, а чем отличаются char и signed char? оба типа, это 8 битные переменные со значением от -128 до 127. чета в книжках этот вопрос не рассматривается, просто говорится что есть char и signed char, и все.....
KIT
V2oD2o
Встал на лапы
Сообщения: 90
Зарегистрирован: Чт дек 09, 2010 12:03:08
Откуда: Зеленоград
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение V2oD2o »

asteroid7 писал(а):
V2oD2o писал(а):...напишите пожалуйста полный исходник на С банальной программки...

Вот и выросло новое поколение...
Печально...


считаю это не совсем адекватной реакцией.. если бы тебе нужна была помощь в delphi, php, css, ps, sql, ai, javascript, 3dmax, solidworks и т.д. и т.п. где я бы мог дать совет - я бы не стал смеятся над твоими попытками изучить что то новое и полезное.. у тебя то что я просил помощи заняло бы минуты 2-3..

печально как раз вот это..

вопрос актуален
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

O-LED писал(а):кстати, а чем отличаются 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 гарантирует, что переменная будет иметь именно ту разрядность, что указано - никаких проблем с переносимостью!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение O-LED »

ARV Спасибо. Если вы не против, я еще немного "потуплю". Вы пишите
тип char по стандарту Си - это знаковый тип, т.е. число со знаком.
а потом
signed char - для знаковых
так в чем разница? оба типа - знаковые 8битные целочисленные переменные.
KIT
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Вопросы по С/С++ (СИ)

Сообщение Gudd-Head »

Разница в "умолчаниях". По умолчанию тип char (также как и int) знаковый, но можно это принудительно указать компилятору: signed char.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Liv
Вымогатель припоя
Сообщения: 525
Зарегистрирован: Сб сен 20, 2008 12:12:30
Откуда: Minsk
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Liv »

O-LED писал(а):так в чем разница? оба типа - знаковые 8битные целочисленные переменные.


Это зависит от реализации компилятора. Например, в IAR C тип char по умолчанию беззнаковый. Чтобы сделать его знаковым, нужно изменить настройки компилятора:
Вложения
Char.gif
(15.86 КБ) 707 скачиваний
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение O-LED »

понятно. значит просто буду ВСЕГДА явно указывать signed или unsigned для переменных.

зы. как думаете, стоит купить http://oz.by/books/more10162722.html?cl ... id=4368282 ?
KIT
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Вопросы по С/С++ (СИ)

Сообщение Gudd-Head »

Цена: 70 122 руб.
:shock:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
lix
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 17, 2010 15:32:19
Откуда: Курган

Re: Вопросы по С/С++ (СИ)

Сообщение lix »

Gudd-Head писал(а):
Цена: 70 122 руб.
:shock:

поди в белорусских рублях?
Аватара пользователя
Liv
Вымогатель припоя
Сообщения: 525
Зарегистрирован: Сб сен 20, 2008 12:12:30
Откуда: Minsk
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Liv »

O-LED писал(а):понятно. значит просто буду ВСЕГДА явно указывать signed или unsigned для переменных.


Да, так вернее будет. Но можно просто узнать про типы своего компилятора. А то можно далеко зайти. Согласно правилам MISRA, базовые типа char, int, short, long, float, double вообще не должны использоваться. Вместо них для определенного компилятора директивами typedef должны быть определены и использованы имена типов эквивалентной длины. Например, UI_8, SI_16 и т.д. Но жить по таким правилам скучно, нет огонька, задора, ночей отладки!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Вопросы по С/С++ (СИ)

Сообщение Gudd-Head »

lix писал(а):поди в белорусских рублях?

Уффф... наверняка :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение avreal »

Согласен со всем текстом, кроме маленького уточнения:
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 то же самое.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение O-LED »

В отличие от int, short int, long int, которые бывают только знаковые или беззнаковые, типов char аж три

ага. переменные int прекрасно работали беззнаковыми переменными без всяких signed , а вот переменные char в кодевижн требуют обязателно signed
KIT
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение ARV »

O-LED писал(а):ага. переменные int прекрасно работали беззнаковыми переменными без всяких signed , а вот переменные char в кодевижн требуют обязателно signed
int прекрасно работали беззнаковыми, пока не было попытки записать в них беззнаковое число 50000 например :) вот тут-то они бы и подкачали - стали знаковыми :)))

а в настройках CodeVision вы поковыряйтесь - где-то наверняка галочку можно снять/поставить, и char станет signed...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение O-LED »

ARV Нет уж. лучше я привыкну явно определять signed и unsigned чем снова в будущем буду ловить "разновидность" подхода к этому вопросу компиляторов. :kill:
KIT
Ответить

Вернуться в «Разные вопросы по МК»