Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


Закрытая тема
Опции темы
Непрочитано 14.01.2013, 14:31   #21
Aleksey_M
Прохожий
 
Регистрация: 14.01.2013
Сообщений: 3
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Aleksey_M на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

И кстати макросы вроде:
Код:
#define  C      A*B      // A*10E7 == 5E7 == 50000000
Код:
#define a_ 5*5*5*5*5;
#define a a_*a_*a_*a_
,и т.п. будут разворачиваться в соответствующий код каждый(!) раз при их вызове, что увеличит объем скомпилированного кода и время его выполнения.

Так что я настаиваю, что в таких ситуациях(и практически во всех остальных) стоит использовать константы и шаблоны, которые есть в С++.
Стоит дважды подумать прежде чем использовать макросы.
Реклама:
Aleksey_M вне форума  
Непрочитано 14.01.2013, 14:32   #22
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Сообщение от Aleksey_M Посмотреть сообщение
Если интересно - проверьте. Возьмет и запишет. Но константа потому и константа , что запишет всего один раз.
Я проверил - вот результат.

Посмотреть бы как у Вас IAR это скушал
Миниатюры:
Нажмите на изображение для увеличения
Название: 800.JPG
Просмотров: 120
Размер:	22.5 Кб
ID:	42269  
Boba_spb вне форума  
Непрочитано 14.01.2013, 16:07   #23
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Сообщение от andries5 Посмотреть сообщение
не
#else a=4
а
#elseif a==4
скорее всего.
И не
#if a=3
а
#if a==3
Где то так.
Ну уж если вы буквоед то правильно
#elif
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 14.01.2013, 16:09   #24
dimchik_b
Вид на жительство
 
Регистрация: 18.04.2008
Сообщений: 373
Сказал спасибо: 103
Сказали Спасибо 50 раз(а) в 40 сообщении(ях)
dimchik_b на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Сообщение от Aleksey_M Посмотреть сообщение
И кстати макросы вроде:
Код:
#define  C      A*B      // A*10E7 == 5E7 == 50000000
Код:
#define a_ 5*5*5*5*5;
#define a a_*a_*a_*a_
,и т.п. будут разворачиваться в соответствующий код каждый(!) раз при их вызове, что увеличит объем скомпилированного кода и время его выполнения.

Так что я настаиваю, что в таких ситуациях(и практически во всех остальных) стоит использовать константы и шаблоны, которые есть в С++.
Стоит дважды подумать прежде чем использовать макросы.
Ну и пускай себе! Компилятор вычисляет константные выражения, прежде чем включать их в код. Так что в результате везде будет просто 3125. А вот A*10E7 == 5E8
dimchik_b вне форума  
Непрочитано 14.01.2013, 16:13   #25
woroba
Гражданин KAZUS.RU
 
Регистрация: 13.06.2005
Адрес: РК г.Павлодар
Сообщений: 866
Сказал спасибо: 99
Сказали Спасибо 216 раз(а) в 140 сообщении(ях)
woroba на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Сообщение от Ivan Panov Посмотреть сообщение
Речь шла о компиляторе IAR а не о бейсике.

Почему Вы не хотите воспользоваться вариантом, указанным в документации?

Код:
#define  A      5
#define  B      10E7
#define  C      A*B      // A*10E7 == 5E7 == 50000000
Вообще то нужно получить 10 в пятой, а не 50000000
__________________
Не ошибается лишь тот, кто ни чего не делает!
woroba вне форума  
Непрочитано 14.01.2013, 16:32   #26
dimchik_b
Вид на жительство
 
Регистрация: 18.04.2008
Сообщений: 373
Сказал спасибо: 103
Сказали Спасибо 50 раз(а) в 40 сообщении(ях)
dimchik_b на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Сообщение от woroba Посмотреть сообщение
Вообще то нужно получить 10 в пятой, а не 50000000
Ну, 10^5-то как раз проще:
Код:
#define TenPow(P) 10E##P
dimchik_b вне форума  
Непрочитано 14.01.2013, 23:04   #27
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Сообщение от ulasenko Посмотреть сообщение
Я бы переписал в нормальную функцию.
Дирректива define - это определение макроса, то есть все, что в ней описано - копируется в код. Чем сложнее макрос и чем чаще он используется, тем больше объем исполняемого файла.
Предполагаю, что в первом варианте автор допустил ошибку(причина - ...), но это совсем НЕ значит, что эту ошибку следует поддерживать и далее.
Вы заблуждаетесь. define не "определение макроса", а макроподстановка. Иными словами вместо кодового слова будет подставлено символьное его определение. Таким образом результат в символах может быть очень значительным ... например целая строка выражений и формул. Но выссказывание "и чем чаще он используется, тем больше объем исполняемого файла" абсолютно неверен. Если значение вычисленного выражения будет константа, то в результате будет вычислена константа на этапе прекомпиляции (результат вычисления можно посмотреть в файле) и подставлено. Если вы подставляете туда переменную либо функцию, то тогда другое дело.
SasaVitebsk вне форума  
Непрочитано 14.01.2013, 23:49   #28
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Начинается... прекомпиляцию ужи сюды притянули.
Boba_spb вне форума  
Непрочитано 14.01.2013, 23:52   #29
Raptor1
Прописка
 
Регистрация: 18.01.2006
Сообщений: 268
Сказал спасибо: 81
Сказали Спасибо 476 раз(а) в 127 сообщении(ях)
Raptor1 на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Если компилятор нормально понимает шаблоны можно так, все вычисления на этапе компиляции, в код попадает нужная константа

Код:
template ‹int TB, int TP› class CStaticPow
{
public:
	enum eRez
	{
		Rez=CStaticPow‹TB,TP-1›::Rez*TB,
	};
};

template ‹int TB› class CStaticPow‹TB,1›
{
public:
	enum eRez
	{
		Rez=TB,
	};
};
Использование
int iRez=CStaticPow‹5,7›::Rez; // 5^7
Raptor1 вне форума  
Непрочитано 15.01.2013, 00:16   #30
Boba_spb
Почётный гражданин KAZUS.RU
 
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
Boba_spb на пути к лучшему
По умолчанию Re: Как задефайнить число в степени?

Ну степень равную 0 мы упадем - ежу понятно.
А какова максимальная степень?
2 в степени 20 хоть даст или рекурсией подавится?
Boba_spb вне форума  
Закрытая тема

Закладки


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C и как определить четное число bass1981 Микроконтроллеры, АЦП, память и т.д 34 12.08.2012 01:16
Как 4 байта, принятых по USART превратить в число формата long int Black Jack Микроконтроллеры, АЦП, память и т.д 2 06.06.2012 21:32
Разложить число на символы ASCII 7Fantomas7 Микроконтроллеры, АЦП, память и т.д 50 18.02.2011 14:57
Как в CVAVR вывести 3х-значное число на порты? code-by Микроконтроллеры, АЦП, память и т.д 26 23.03.2010 23:23
Автоматическое определение степени заряженности аккумулятора skywriter_ufa Источники питания и свет 15 23.02.2010 20:57


Часовой пояс GMT +4, время: 13:21.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot