Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 120 в виде 1111000, Из серии один вопрос-один ответ 
:(
    Опции темы
new_web
Дата 20.2.2008, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Да! Спасибо, я почти додумался сам, я пробовал unsigned int  по незнанию..
Теперь многое прояснилось! smile  и стало работать проще!
PM MAIL   Вверх
phprus
Дата 20.2.2008, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Цитата(Mayk @  16.2.2008,  14:54 Найти цитируемый пост)
если вместо моветонного макроса использовать шаблоны с enum'ами, то точно будет всё вычисленно в CT.

Если вам не трудно, то не могли бы вы привести пример такого преобразования на шаблонах, хотябы для однобайтных констант, а то я никак не могу придумать как можно использовать шаблоны в этой задаче.
PM MAIL WWW ICQ   Вверх
phprus
Дата 21.2.2008, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 22.8.2006

Репутация: нет
Всего: 3



Придумал.
Вот код на шаблонах для двоичных констант и за одно шаблон для возведения целого числа в целую, положительную степень:

Код

#include <iostream>
#include <iomanip>
/******************************************************************************/
template <unsigned long n, unsigned int step = 1>
struct binconst8
{
    enum {value = (n%10)*step + binconst8<n/10,step*2>::value};
};
template <unsigned long n>
struct binconst8<n, 128>
{
    enum { value = n*128 };
};

// -----------------------------

template <unsigned long a, unsigned long b>
struct binconst16
{
    enum { value = (binconst8<a>::value << 8) + binconst8<b>::value };
};

template <unsigned long a, unsigned long b, unsigned long c>
struct binconst24
{
    enum { value = (binconst8<a>::value << 16) + (binconst8<b>::value << 8) + binconst8<c>::value };
};

template <unsigned long a, unsigned long b, unsigned long c, unsigned long d>
struct binconst32
{
    enum { value = (binconst16<a, b>::value << 16) + binconst16<c, d>::value };
};

/******************************************************************************/

template <unsigned long n, unsigned int step>
struct pow_int
{
    enum {value = (n)*pow_int<n, step-1>::value};
};
template <unsigned long n>
struct pow_int<n, 0>
{
    enum {value = 1};
};

/******************************************************************************/

int main() {

    std::cout << pow_int<10, 0>::value << std::endl;
    std::cout << pow_int<10, 1>::value << std::endl;
    std::cout << pow_int<10, 2>::value << std::endl;
    std::cout << pow_int<10, 3>::value << std::endl;

    std::cout << pow_int<2, 0>::value << std::endl;
    std::cout << pow_int<2, 1>::value << std::endl;
    std::cout << pow_int<2, 2>::value << std::endl;
// ----
    std::cout << std::endl << std::endl;
// ----
    std::cout << binconst8<0>::value << std::endl;
    std::cout << binconst8<1>::value << std::endl;
    std::cout << binconst8<10>::value << std::endl;
    std::cout << binconst8<11>::value << std::endl;
    std::cout << binconst8<100>::value << std::endl;
    std::cout << binconst8<101>::value << std::endl;
    std::cout << binconst8<110>::value << std::endl;
    std::cout << binconst8<111>::value << std::endl;
    std::cout << binconst8<1000>::value << std::endl;
    std::cout << binconst8<1001>::value << std::endl;
    std::cout << binconst8<1010>::value << std::endl;
    std::cout << binconst8<1011>::value << std::endl;
    std::cout << binconst8<1100>::value << std::endl;
    std::cout << binconst8<1101>::value << std::endl;
    std::cout << binconst8<1110>::value << std::endl;
    std::cout << binconst8<1111>::value << std::endl;
    std::cout << binconst8<11111111>::value << std::endl;
// ----
    std::cout << binconst16<10, 11>::value << std::endl;
    std::cout << binconst24<10, 11, 1>::value << std::endl;
    std::cout << binconst32<10, 11, 1, 0>::value << std::endl;
// ----

    return 0;
}

PM MAIL WWW ICQ   Вверх
BIV
Дата 22.9.2008, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 219
Регистрация: 20.12.2007

Репутация: 1
Всего: 1



А не проще по другому?
Код

#include <stdlib.h>

short z;
char code[15];

z=5;
ltoa(z,code,2);
printf("2:  %s\n",code);


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.