Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.82
programist alenka
0 / 0 / 0
Регистрация: 18.03.2009
Сообщений: 22
#1

Перевод целого десятичного числа в двоичною систему числения - C++

28.03.2009, 16:04. Просмотров 2769. Ответов 11
Метки нет (Все метки)

составит програму перевода целого десятичног числа в двоичною систему числения
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.03.2009, 16:04     Перевод целого десятичного числа в двоичною систему числения
Посмотрите здесь:

составить програму перевода целого десятичного числа в шестнадцятеричную систему числения C++
перевод целого числа в шестнадцатеричную систему C++
C++ Перевод десятичного числа в двоично-десятичную систему счисления
Перевод целого числа в двоичную систему счисления C++
C++ Перевод целого десятичного числа в двоичную систему счисления
Перевод целого десятичного числа в строку и обратно в десятичное число C++
C++ Перевод десятичного вещественного числа в новую систему счисления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6474 / 2249 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
28.03.2009, 16:13     Перевод целого десятичного числа в двоичною систему числения #2
Что не получается?
kolyanb
0 / 0 / 0
Регистрация: 27.03.2009
Сообщений: 3
29.03.2009, 00:02     Перевод целого десятичного числа в двоичною систему числения #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <Math.h>
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main(int argc, char* argv[])
{
   int n, st = 0;
   cout<<"Vvedite chislo v 10 sisteme schisleniy "; cin>>n;
   while (n > pow(2, st))
    ++st;
   --st;
   for (int i = st; i >= 0; --i)
   {
    if (n >= pow(2, i))
      {
            cout<<1;
         n = n - pow(2, i);
      }
      else
        cout<<0;
   }
    getch();
    return 0;
}
//---------------------------------------------------------------------------
Yevgenijz
11 / 11 / 1
Регистрация: 31.03.2009
Сообщений: 69
31.03.2009, 16:43     Перевод целого десятичного числа в двоичною систему числения #4
Цитата Сообщение от programist alenka Посмотреть сообщение
составит програму перевода целого десятичног числа в двоичною систему числения
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int main()
{
 const int kol_vo_bitov=sizeof(int)*8;
 char bin[kol_vo_bitov];
 register char *ptr=bin;// далее заполним массив двоичных цифр
 *ptr++ =' ';//первый символ пробел
 int chislo;
 int i;
 i=kol_vo_bitov-1;
 do{
  *ptr++ = '0';
 }while(--i); // заполняем строку кодом нуля
 printf("Vvedite chislo");
 scanf("%d",&chislo);
 if(chislo<0){
  bin[0]='-'; // код минуса
  chislo= 
  -chislo; // чтобы не получилось "отнять" =-
 }
 i=kol_vo_bitov-1;
 do{
  *--ptr +=((char)chislo)&1; // младший бит
  chislo>>=1; // сдвигаем число вправо на 1 бит
 }while(--i);
 // теперь готова строка bin
 //вывод строки
 i=kol_vo_bitov;
 ptr=bin;
 do{
  putchar(*ptr++);
 }while(--i); 
}
BornLeader
50 / 46 / 1
Регистрация: 16.05.2008
Сообщений: 162
31.03.2009, 17:22     Перевод целого десятичного числа в двоичною систему числения #5
Цитата Сообщение от programist alenka Посмотреть сообщение
составит програму перевода целого десятичног числа в двоичною систему числения
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
void DecToBin(int value)
{
  int mask = 0x8000;
  ~mask;
  for(int i=0;i<16;i++)
  {
    if(mask&value)
      cout << "1";
    else
      cout << "0";
    mask >>=1;
  }
  cout << endl;
}
 
int main(void)
{
  DecToBin(255);
  return 0;
}
Yevgenijz
11 / 11 / 1
Регистрация: 31.03.2009
Сообщений: 69
02.04.2009, 07:36     Перевод целого десятичного числа в двоичною систему числения #6
Цитата Сообщение от BornLeader Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
void DecToBin(int value)
{
  int mask = 0x8000;
  ~mask;
  for(int i=0;i<16;i++)
  {
    if(mask&value)
      cout << "1";
    else
      cout << "0";
    mask >>=1;
  }
  cout << endl;
}
 
int main(void)
{
  DecToBin(255);
  return 0;
}
Неправильно!
Потому что основано на неверном предположении, что тип int имеет 16 разрядов.
На самом деле это было в 16разрядной DOS, но в 32разрядных операционных системах int имеет 32разряда, а в 64разрядных 64 разряда. Это сделано специально для лучшей переносимости программ, написанных на С/C++ .
Следовало использовать sizeof(int), чтобы не быть привязанным к размерности int.
Для 16иразрядного числа есть термине short int, но это опять же не гарантируется.
Можно только построить цепочку без указания конкретной разрядности типа.
char<=short int<=int<=long int
P.S.
И пожалуйста, избавляйтесь от дурной паскалевской привычки записывать текст подпрограммы над текстом основной программы, читать такое неприятно. Текст подпрограммы должен находиться под текстом вызывающей, а не наоборот.(Это требование стиля, а не приказ, но все же не следует писать на C по-паскалевски-- это дурной тон)
Добавлено через 2 минуты 11 секунд
здесь усовершенствовал свою программу
обнаружил ошибку в своей программе и исправил
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
int main()
{
 const int kol_vo_bitov=sizeof(int)*8;
 char bin[kol_vo_bitov+1];
 register char *ptr=bin;// далее заполним массив двоичных цифр
 *ptr++ =' ';//первый символ пробел(если положительное)
 int chislo;
 int i;
 i=kol_vo_bitov;
 do{
  *ptr++ = '0';
 }while(--i); // заполняем строку кодом нуля
 printf("Vvedite chislo");
 scanf("%d",&chislo.i);
 if(chislo<0){
  bin[0]='-'; // код минуса
  chislo= 
  -chislo; // чтобы не получилось "отнять" =-
  if(chislo<0){ // единственный случай -2^kol_vo_bitov
   chislo=0;
   bin[1]='1';}
 }
 //i=kol_vo_bitov-1; эта строка не нужна
 do{
  *--ptr +=((char)chislo)&1; // младший бит
  chislo>>=1; // сдвигаем число вправо на 1 бит
 }while(chislo); // здесь изменение: если chislo=0, то остальные символы все равно 
                     //заполнятся символами нуля
 // теперь готова строка bin
 //вывод строки
 i=kol_vo_bitov+1;
 ptr=bin;
 do{
  putchar(*ptr++);
 }while(--i);
putchar('\n');
getch();
}
BornLeader
50 / 46 / 1
Регистрация: 16.05.2008
Сообщений: 162
02.04.2009, 14:33     Перевод целого десятичного числа в двоичною систему числения #7
Хорошо Yevgenijz, прошлый пример был сделан мною на коленке. Ну а вот если так что скажешь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;
 
void PrintBin(int n);
 
int main(int argc, char* argv[])
{
    for (int i = 0; i < 16; i++)
        PrintBin(i);
   return 0;
}
 
void PrintBin(int n)
{
  unsigned int mask = 0;
  mask = ~mask;
  mask >>= 1;
  mask = ~mask;
  for (size_t i = sizeof(int)*8; i > 0; i--)
  {
    if(mask & n)
      cout << "1";
    else
      cout << "0";
    mask >>= 1;
    if(!((i-1)%8)) cout << " ";
  }
  cout << endl;
}
Добавлено через 1 минуту 53 секунды
Прошу заметить работает как часы.
Yevgenijz
11 / 11 / 1
Регистрация: 31.03.2009
Сообщений: 69
02.04.2009, 15:02     Перевод целого десятичного числа в двоичною систему числения #8
Цитата Сообщение от BornLeader Посмотреть сообщение
Хорошо Yevgenijz, прошлый пример был сделан мною на коленке. Ну а вот если так что скажешь:
C++
1
2
    for (int i = 0; i < 16; i++)
        PrintBin(i);
Добавлено через 1 минуту 53 секунды
Прошу заметить работает как часы.
Значит работает на 15битных значениях, а если будут 31битные, будет косяк.

напр для 4000000000(четыре миллиарда)


Добавлено через 10 минут 54 секунды
Вообще-то сейчас уже прогресс в части оформления программы.
Но ты её проверил для значений от 0 до 15 и говоришь, как часы, а вдруг на 16 облом будет?
Непонятно, чего ты хочешь добиться, когда сдвигаешь и переворачиваешь mask?
и для чего используешь остаток от деления на 8?

Добавлено через 9 минут 31 секунду
разве нельзя было написать не
C++
1
mask=0; mask= ~mask;
, а просто
C++
1
mask=~0;
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
02.04.2009, 15:08     Перевод целого десятичного числа в двоичною систему числения #9
Yevgenijz, знак минуса перед двоичной записью,это сурово.

Цитата Сообщение от Yevgenijz Посмотреть сообщение
Непонятно, чего ты хочешь добиться, когда сдвигаешь и переворачиваешь mask?
установить старший бит в единицу,остальные биты в ноль.

Цитата Сообщение от Yevgenijz Посмотреть сообщение
и для чего используешь остаток от деления на 8?
при выводе разделить блоки по 8 знаков пробелом.
Yevgenijz
11 / 11 / 1
Регистрация: 31.03.2009
Сообщений: 69
02.04.2009, 15:39     Перевод целого десятичного числа в двоичною систему числения #10
Цитата Сообщение от Humanitis Посмотреть сообщение
Yevgenijz, знак минуса перед двоичной записью,это сурово.
Просто двоичную unsigned вывести гораздо легче, чем со знаком. Сначала не учел случай, когда число = - 2^разрядность int, т.е. тогда получится, что мы меняем знак этого числа, а оно не меняется!И не ноль, а отрицательное!
BornLeader
50 / 46 / 1
Регистрация: 16.05.2008
Сообщений: 162
02.04.2009, 15:59     Перевод целого десятичного числа в двоичною систему числения #11
Цитата Сообщение от Yevgenijz Посмотреть сообщение
Цитата: Сообщение от BornLeader Посмотреть сообщение Хорошо Yevgenijz, прошлый пример был сделан мною на коленке. Ну а вот если так что скажешь: Код C++ 1 2 3 4 for (int i = 0; i < 16; i++) PrintBin(i); Добавлено через 1 минуту 53 секунды Прошу заметить работает как часы. Значит работает на 15битных значениях, а если будут 31битные, будет косяк.
Ты внимательно посмотри что это тело функции main. А свою функцию PrintBin я до этого тестировал на большем количестве чисел. И еще раз на помню
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void PrintBin(int n)
{
  unsigned int mask = 0;
  mask = ~mask;
  mask >>= 1;
  mask = ~mask;
  for (size_t i = sizeof(int)*8; i > 0; i--) // вот здесь посмотри внимательно
  {
    if(mask & n)
      cout << "1";
    else
      cout << "0";
    mask >>= 1;
    if(!((i-1)%8)) cout << " ";
  }
  cout << endl;
}
Добавлено через 5 минут 59 секунд
Цитата Сообщение от Yevgenijz Посмотреть сообщение
Значит работает на 15битных значениях, а если будут 31битные, будет косяк. напр для 4000000000(четыре миллиарда)
Так вот при вызове

C++
1
PrintBin(4000000000);
Результат:
C++
1
11101110 01101011 00101000 00000000
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2009, 16:59     Перевод целого десятичного числа в двоичною систему числения
Еще ссылки по теме:

C++ Перевод отрицательного целого десятичного числа в двоичное
C++ Перевод отрицательного целого десятичного числа в двоичное
C++ Подсчитать количество цифр целого десятичного числа
посчитать и вывести на экран количество целого и десятичного числа C++
Отсортировать цифры десятичного представления целого числа C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yevgenijz
11 / 11 / 1
Регистрация: 31.03.2009
Сообщений: 69
02.04.2009, 16:59     Перевод целого десятичного числа в двоичною систему числения #12
Молодец!
Значит, действительно на твоем Си тип int содержит 32 разряда!
Оч. Хорошо!
Здорово!
Правда из задания было непонятно, нужно ли выводить двоичное число со знаком или без знака
Yandex
Объявления
02.04.2009, 16:59     Перевод целого десятичного числа в двоичною систему числения
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru