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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование строке значения int, Системы числения из десятичной в двоичну 
V
    Опции темы
Killer_13
  Дата 18.4.2009, 02:35 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Значит, читал ФАКЮ и смотрел похожые темы, но мне не получается.
Задача на "С", преобразовать введенное число в двоичную систему, вот что начудил, может оно щас работает не идеально, нужно подкоррегировать, но вот не могу присваивать целые значения, тоисть в данном случае нолик или единичку строке, в которой хочу чтоб хранилось мое число двоичное.
Подскажите. 
Пасиб
Код

#include <stdio.h>
#include <string.h>
#include <ctype.h>


int main()

{
     unsigned int x;
         char s[30];
         int i=0,y;
         scanf("%d", &x);
         while(x!=0)
         {
         y=x%2;
         x=x/2;
         s[i++]=y;
         }
printf("\ns=%s",s);
return 0;
}



Вот строка где мне кажется ошыбка о которой спрашываю, тоисть где нужно преобразование сделать.
Код

 s[i++]=y;


 пробовал с функцией itoa не получилось
PM MAIL   Вверх
math64
Дата 18.4.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



У тебя нет '\0' в конце строки, всего размер строки 33 символа, в сроку записывать '0' и '1', а не 0 и 1 и цифры в строке у тебя будут начиная от младшей.
Код

unsigned x;
char s[33];
...
s[32] = '\0';
for (int i=0; i < 32; i++)
  s[31-i] = ((x & (1 << i)) == 0) ? '0' : '1';
// Будут перчататься ведущие нули
printf("dec:%u bin:%s\n", x, s);

PM   Вверх
Dem_max
Дата 18.4.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

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



 smile 
Для начала тобе стоит подучить русский язык.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Killer_13
Дата 18.4.2009, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хмм, мне кажеться я сюда обратился за советом и подсказкой в конкретной проблеме, а не для того, чтоб исправляли или смотрели на мои орфографические ошибки. Русский не мой родной язык, так че если я делаю ошибки в некоторых словах, люди меня не понимают? Или здесь позволено писать только тем, кто правильно пишет по русски и без орфографических ошибок. Представте какие-то веские аргументы, на счет вашего заявления! Или... или может вы просто увеличиваете количество сообщений таким способом? smile
PM MAIL   Вверх
GoldFinch
Дата 18.4.2009, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



Цитата(Killer_13 @  18.4.2009,  14:24 Найти цитируемый пост)
или может вы просто увеличиваете количество сообщений таким способом?

да!!!111
PM MAIL ICQ   Вверх
Anikmar
Дата 18.4.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Killer_13 @  18.4.2009,  13:24 Найти цитируемый пост)
Хмм, мне кажеться я сюда обратился за советом и подсказкой в конкретной проблеме, а не для того, чтоб исправляли или смотрели на мои орфографические ошибки. Русский не мой родной язык, так че если я делаю ошибки в некоторых словах, люди меня не понимают? Или здесь позволено писать только тем, кто правильно пишет по русски и без орфографических ошибок. Представте какие-то веские аргументы, на счет вашего заявления! Или... или может вы просто увеличиваете количество сообщений таким способом?  

Не надо так резко реагировать на справедливую критику. В конце концов, вы же обращаетесь за помощью на русском языке, поэтому не стоит обижаться.  smile 
Так как вы посчитали скрыть ваше местоположение, откуда нам знать, что русский - не ваш родной язык?
А вообще у нас у всех самое горячее желание увеличить счетчик сообщений - за каждую сотню дают бесплатный пончик, а за пятьсот платят 100 межгалактических кредитов.  smile 

Вам math64 выложил красивое готовое решение, почему бы еще вдогонку не указать на ваши ошибки в обычном тексте?  smile 
PM MAIL ICQ   Вверх
Killer_13
Дата 18.4.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



На счет сообщений, не знал, что за них дают какие то премиальные. smile Буду знать. smile
Ок, но отреагировал я нормально, и спокойно, без лишних слов и так далее. smile
math64 - пасиб за ответ(совет), вечером обязательно попробую.
Постараюсь больше не делать орфографических ошибок. smile
PM MAIL   Вверх
Dov
Дата 18.4.2009, 19:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Код

void GetBinary (unsigned num) 
{
    for (int i = num > 255 ? 15 : 7; i >= 0; i--)
        printf("%d", (num >> i) & 1);
    puts("");
}

int main()
{
    GetBinary(123);
    
    return 0;
}


Это сообщение отредактировал(а) Dov - 18.4.2009, 19:18


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 18.4.2009, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Ой, не обратил внимания, что речь идёт о строке. 
Тогда так:
Код
void GetBinary (char * buf) 
{
    unsigned int num = atoi(buf);

    for (int i = num > 255 ? 15 : 7; i >= 0; i--)
        printf("%d", (num >> i) & 1);
    puts("");
}

int main()
{
    GetBinary("123");
    
    return 0;
}



Это сообщение отредактировал(а) Dov - 18.4.2009, 20:00


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
math64
Дата 19.4.2009, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Темооткрыватель хотел чистый C, но думаю он сам сможет очистить приведённые примеры от C++
PM   Вверх
Killer_13
Дата 22.4.2009, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хммм, я опять наверное че т не то делаю


вот код, 
Код

#include <stdio.h>
#include <string.h>
#include <ctype.h>


int main()

{
     unsigned int x;
         char s[33];
         int i=0,y;
         printf("Zahl\n");
         scanf("%d", &x);
         s[32]='\0';
         for(i;i<32;i++){
         s[31-i]=(x & (1<i)==0)?'0':'1';
         }
         printf("dec:%u bin:%s\n", x, s);

return 0;
}


и вот что выводит в итоге


Присоединённый файл ( Кол-во скачиваний: 14 )
Присоединённый файл  1.jpg 15,42 Kb
PM MAIL   Вверх
J0ker
Дата 22.4.2009, 01:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

void parse(unsigned int n, char *buf)
{
    memset(buf, '0', 32);
    buf[32] = 0;
    for(int i = 31; n; n >>= 1)
        buf[i--] = '0' + n % 2;
}

char buf[33];
parse(54778454, buf);



--------------------
user posted image
PM MAIL   Вверх
math64
Дата 22.4.2009, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

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



Цитата(Killer_13 @  22.4.2009,  00:45 Найти цитируемый пост)
хммм, я опять наверное че т не то делаю

Внимательнее посмотри на мой код:
Код

//  s[31-i]=(x & (1<i)==0)?'0':'1'; // Killer_13
  s[31-i] = ((x & (1 << i)) == 0) ? '0' : '1'; // math64

У тебя < (сравнение) вместо << (сдвиг влево) и порядок скобок не тот
PM   Вверх
Killer_13
Дата 22.4.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хммм, вот сижу мудрю, как бы эти ведущие нули убрать...
Код

s[31-i] = ((x & (1 << i)) == 0) ? '0' : '1';

нужно вместо 31 поставить только столько столько действительно нужно, нужно какое то значение еще высчитать.

но вот как? :(

И че т толком не могу понять как работает то что в скобках. :(
Наше введенное с клавиатуры число мы с помощью логического "и" сравниваем с числом которое сдвигается влево на единицу, и проверяем не равен ли результат нулю, а я вот еще понят не могу, я смотрел как с помощью битовых операций сравнивают "0" и "1", а как сравнивать числа разные? Так же? Или я не правильно понял все это? :(
PM MAIL   Вверх
Dov
Дата 22.4.2009, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Killer_13 @  22.4.2009,  15:39 Найти цитируемый пост)
Хммм, вот сижу мудрю, как бы эти ведущие нули убрать...

Шо ж ты так мучаися, мил человек? Юзай itoa и не бери в голову.
Код
int main()
{
    unsigned int x;
    char s[33];

    printf("Zahl\n");
    scanf("%d", &x);

    printf("dec:%u bin:%s\n", x, itoa(x, s, 2));

    return 0;
}


Добавлено через 1 минуту и 53 секунды
Цитата(Killer_13 @  18.4.2009,  02:35 Найти цитируемый пост)
пробовал с функцией itoa не получилось

плохо пробовал...  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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