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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Системы счисления, Десятичное в двоичное число 
:(
    Опции темы
Visualist
Дата 7.11.2004, 17:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Есть ли стандартные функции представления десятичного числа в его двоичный эквивалент?
Или самому писать функцию?
  Вверх
shedon
Дата 7.11.2004, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Что значит "стандартные функции представления десятичного числа в его двоичный эквивалент", число всегда хранится в двоичном виде, где ты ево хочешь видеть в двоичном виде, в строке ?
А писать тут всего пара строк вот например
Код

unsigned long DecToBin(unsigned short usValue)
{
     unsigned char s[255];
     while(usValue)
     {
               if(usValue&0x01)
                        *s = '1';
               else
                        *s = '0';
               s++;
               usValue >>= 1;
     }
      *s = '\0';
      for(int i=0, j=strlen(s)-1; i<j; i++, j--){
 s[i] ^= s[j] ^= s[i] ^= s[j];
      }
      return atoi(s);
}

Конечно эту функцию нужно доработать, сделать защиту от переполнения буфера и т.д.
Правда я её не проверял, мож и не работает smile


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
maxim1000
Дата 7.11.2004, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



можно немного подправить:
Код

    unsigned char s[255];
    while(usValue)
    {
              if(usValue&0x01)
                       *s = '1';
              else
                       *s = '0';
              s++;
              usValue >>= 1;
    }
     *s = '\0';

||
V
Код

unsigned char buffer[255];
unsigned char *s=buffer+254;
*s=0;
while(usValue)
{
 s--;
 if(uaValue&1)
   *s='1';
 else
   *s='0';
}



--------------------
qqq
PM WWW   Вверх
shedon
Дата 7.11.2004, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



maxim1000
точно, блин сейчас чистил картошку и вспомнил что намудил, побежал исправлять, но вижу ты уже исправил smile
Получается вот так: smile
Код

unsigned long DecToBin(unsigned short usValue)
{
    char s[255];
    char *sBuffer = s;
    while(usValue)
    {
              *sBuffer = 0x30+(usValue&0x01);
              sBuffer++;
              usValue >>= 1;
    }
     *sBuffer = '\0';
     for(int i=0, j=strlen(s)-1; i<j; i++, j--){
s[i] ^= s[j] ^= s[i] ^= s[j];
     }
     return atoi(s);
}



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 8.11.2004, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Что-то зачистили с такими вопросами.
Код

void DecToStrBin(char* pch , DWORD usValue)
{
 for( int BitCount = 0 ; usValue >> BitCount; ++BitCount );
 BitCount -= 1;
 do {
   *pch++ = '0' + ( usValue >> BitCount & 1 );
 } while( BitCount-- );
 *pch = NULL;
}

DWORD StrBinToDec(char * pch)
{
 DWORD usValue = 0;
 while ( *pch )
 {
   usValue <<= 1;
   usValue |= *pch++ & 1;
 }
 return usValue;
}

// пример использования
void main()
{
 char Temp[256];

 DecToStrBin(&Temp[0], 0xAB10);
 printf("\nTemp = %s",Temp);

 DWORD Res = StrBinToDec(Temp);
 printf("\nRes = %08X",Res);
}

Результат:
Цитата
Temp = 1010101100010000
Res = 0000AB10




--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 8.11.2004, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Для любого целого типа данных:
Код

template <class T>
void printBin(T num)
{
for(int i=0;i<sizeof(T);i++,num>>=1)
{
 cout<<(num&0x01);
}
}



--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
maxim1000
Дата 8.11.2004, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

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



Цитата(sergej @ 7.11.2004, 23:52)
Для любого целого типа данных:
Код

template <class T>
void printBin(T num)
{
for(int i=0;i<sizeof(T);i++,num>>=1)
{
 cout<<(num&0x01);
}
}

1. скорее всего sizeof(T)*8
2. выведет биты, начиная смладшего, такой порядок не всегда подходит...


--------------------
qqq
PM WWW   Вверх
sergejzr
Дата 8.11.2004, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



Цитата(maxim1000 @ 8.11.2004, 10:57)
1. скорее всего sizeof(T)*8
2. выведет биты, начиная смладшего, такой порядок не всегда подходит...

првый пукт ОК smile
А про порядок никто не говорил smile


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
bel_nikita
Дата 8.11.2004, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

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



Цитата
2. выведет биты, начиная смладшего, такой порядок не всегда подходит...


Цитата
А про порядок никто не говорил
Порядок - это порядок, а никак иначе smile
Код

template <class T>
void printBin(T num)
{
 for(int i=sizeof(T)*8 - 1; i>=0; --i)
 {
   cout<<(num >> i & 0x01);
 }
}



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Adil'
Дата 9.11.2004, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А зачем такие сложности? Не проще ли воспользоваться какой-либо функцией из семества itoa (_itoa) и strtol из <stdlib.h>:
Код
//число в "двоичную" строку:
char str[33];
itoa(25252456,str,2);

//из "двоичной" строки в число
long num=strtol(str,NULL,2);



--------------------
Удачи
PM MAIL WWW   Вверх
shedon
Дата 9.11.2004, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



Цитата
А зачем такие сложности? Не проще ли воспользоваться какой-либо функцией из семества itoa (_itoa) и

Ну дак самому интереснее smile


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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