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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 14:36     Программа перевода целого числа без знака в двоичную систему счисления #1
Здравствуйте . Помогите , пожалуйста , реализовать программу перевода целого числа без знака в двоичную систему счисления , при этом выдать результат от младшего байта к старшему .
Объясните , пожалуйста , алгоритм решения . Всё облазил - не пойму , как это всё можно сделать.


Вот есть прога , но она выводит от старшего к младшему , а нужно наоборот
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
#include<iostream.h>
#include<iomanip.h>
#include <conio.h>
#include<stdio.h>
 
  int pr1(void);                  // Прототип функції
 
  main (void)                      //Головна програма
 {
     clrscr();
     pr1();
     getch();
     return 0;
 }
 
 int  pr1()          //Відображення двійкового подання цілого числа без знака
 {
   unsigned x;
   unsigned c, displayMask=1 << 15;
   cout<<"Уведіть ціле число без знака:  " ;
   cin >> x;
   cout << setw(7) << x << " = ";
   for (c=1; c<=16; c++)
    {
       cout << (x & displayMask ? '1':'0');
       x<<=1;
       if (!(c % 8))      cout << ' ';
     }
   cout << endl;
   return 0;
 }
Заранее огромное спасибо за помощь !
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2013, 14:36     Программа перевода целого числа без знака в двоичную систему счисления
Посмотрите здесь:

Программа для перевода данного натурального числа в N-ную систему счисления C++
Программа перевода в двоичную систему счисления C++
C++ Простейший алгоритм перевода числа из 10 системы счисления в 16 ричную систему счисления
Перевод целого числа в двоичную систему счисления C++
C++ Перевод целого десятичного числа в двоичную систему счисления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 14:40     Программа перевода целого числа без знака в двоичную систему счисления #2
Немного о преобразовании чисел между системами счисления
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 14:54  [ТС]     Программа перевода целого числа без знака в двоичную систему счисления #3
Там про 16-ричную , мне бы с двоичной разобраться
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
22.09.2013, 15:00     Программа перевода целого числа без знака в двоичную систему счисления #4
Цитата Сообщение от VASYA_A Посмотреть сообщение
unsigned c, displayMask=1 << 15;
Цитата Сообщение от VASYA_A Посмотреть сообщение
for (c=1; c<=16; c++)
что за магические числа такие 16 и 15? что они означают?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.09.2013, 16:17     Программа перевода целого числа без знака в двоичную систему счисления #5
Цитата Сообщение от VASYA_A Посмотреть сообщение
от старшего к младшему , а нужно наоборот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int  pr1()          //Відображення двійкового подання цілого числа без знака
 {
   unsigned x;
   unsigned c, displayMask=1;
   cout<<"Уведіть ціле число без знака:  " ;
   cin >> x;
   cout << setw(7) << x << " = ";
   for (c=1; x!=0; c++)
    {
       cout << (x & displayMask ? '1':'0');
       x>>=1;
       if (!(c % 8))      cout << ' ';
     }
   cout << endl;
   return 0;
 }
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 16:40  [ТС]     Программа перевода целого числа без знака в двоичную систему счисления #6
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int  pr1()          //Відображення двійкового подання цілого числа без знака
 {
   unsigned x;
   unsigned c, displayMask=1;
   cout<<"Уведіть ціле число без знака:  " ;
   cin >> x;
   cout << setw(7) << x << " = ";
   for (c=1; x!=0; c++)
    {
       cout << (x & displayMask ? '1':'0');
       x>>=1;
       if (!(c % 8))      cout << ' ';
     }
   cout << endl;
   return 0;
 }
Программа не правильно работает
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.09.2013, 16:50     Программа перевода целого числа без знака в двоичную систему счисления #7
Цитата Сообщение от VASYA_A Посмотреть сообщение
Программа не правильно работает
Я не нашел такого примера, для которого эта функция работает неправильно.
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 17:22  [ТС]     Программа перевода целого числа без знака в двоичную систему счисления #8
Цитата Сообщение от zss Посмотреть сообщение
Я не нашел такого примера, для которого эта функция работает неправильно.
Извините , виноват. Всё правильно работает .

Если Вам не трудно , можете, пожалуйста , объяснить алгоритм работы программы.
Я новичок в С++, поэтому многие моменты пока трудно понять(
Что это за displayMask? Почему он = 1 , зачем это нужно?
Зачем мы делаем операцию setw(7) ?

И что же происходить в цикле ? Что это за условие ? ( от с=1, х не равно 0 , с++)

Извините , за такие глупые вопросы , просто хочется разобраться нормально , а не тупо взять прогу .
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.09.2013, 17:31     Программа перевода целого числа без знака в двоичную систему счисления #9
C++
1
2
3
4
5
6
7
cout << x << " = "; // setw(7) не обязательно
   for (c=1; x!=0; c++) // c - номер очередного бита, повторяем пока x не обнулится
    {
       cout << (x & displayMask ); //Выводим значение самого правого бита
       x>>=1;                            // сдвигаем x на один разряд вправо
       if (!(c % 8))      cout << ' '; // для красоты восьмерки битов разделяем пробелами
     }
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 18:13  [ТС]     Программа перевода целого числа без знака в двоичную систему счисления #10
Цитата Сообщение от zss Посмотреть сообщение
C++
1
2
3
4
5
6
7
cout << x << " = "; // setw(7) не обязательно
   for (c=1; x!=0; c++) // c - номер очередного бита, повторяем пока x не обнулится
    {
       cout << (x & displayMask ); //Выводим значение самого правого бита
       x>>=1;                            // сдвигаем x на один разряд вправо
       if (!(c % 8))      cout << ' '; // для красоты восьмерки битов разделяем пробелами
     }
А что такое displayMask=1 ?
for (c=1; x!=0; c++)- то есть , до конца значения х ?

cout << (x & displayMask ); //Выводим значение самого правого бита - а вот это не понятно совсем ; какая суть здесь операции побитового "И" , что щё за правый бит ?

x>>=1; // сдвигаем x на один разряд вправо - зачем мы это делаем ???


Извините опять за вопросы..

Добавлено через 20 минут
Цитата Сообщение от VASYA_A Посмотреть сообщение
А что такое displayMask=1 ?
for (c=1; x!=0; c++)- то есть , до конца значения х ?

cout << (x & displayMask ); //Выводим значение самого правого бита - а вот это не понятно совсем ; какая суть здесь операции побитового "И" , что щё за правый бит ?

x>>=1; // сдвигаем x на один разряд вправо - зачем мы это делаем ???


Извините опять за вопросы..

А как сделать , чтобы результат был в виде 2-х байт : сначала младшего , потом старшего?

Например , если ввести число 67,то получим результат такой : 01000011 0000000
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
22.09.2013, 18:15     Программа перевода целого числа без знака в двоичную систему счисления #11
Для разнообразия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <string>
#include <bitset>
#include <algorithm>
#include <climits>
 
int main(){
   unsigned int number = 0 ;
   std::cin >> number ;
   std::string str = std::bitset< sizeof(number) * CHAR_BIT >(number).to_string ( ) ;
   std::reverse ( str.begin ( ) , str.end ( ) ) ; //delete
   std::cout << str << std::endl ;
}
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.09.2013, 18:28     Программа перевода целого числа без знака в двоичную систему счисления #12
Пример
Исходное число х
0110
Выделяем правый бит побитовым "и" с 0001, получаем 0
сдвигаем х вправо на один бит
0011
Выделяем правый бит побитовым "и" с 0001, получаем 1
снова сдвигаем х вправо на один бит
0001
Выделяем правый бит побитовым "и" с 0001, получаем 1
снова сдвигаем х вправо на один бит
0000
Выделяем правый бит побитовым "и" с 0001, получаем 0
x равно нулю - процесс окончен
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 18:56  [ТС]     Программа перевода целого числа без знака в двоичную систему счисления #13
Цитата Сообщение от zss Посмотреть сообщение
Пример
Исходное число х
0110
Выделяем правый бит побитовым "и" с 0001, получаем 0
сдвигаем х вправо на один бит
0011
Выделяем правый бит побитовым "и" с 0001, получаем 1
снова сдвигаем х вправо на один бит
0001
Выделяем правый бит побитовым "и" с 0001, получаем 1
снова сдвигаем х вправо на один бит
0000
Выделяем правый бит побитовым "и" с 0001, получаем 0
x равно нулю - процесс окончен
Так что такое displayMask=1 ?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.09.2013, 21:08     Программа перевода целого числа без знака в двоичную систему счисления #14
Цитата Сообщение от VASYA_A Посмотреть сообщение
Так что такое displayMask=1 ?
не просто 1, а 0000000000000000000000000000000000000000000000000000000000000001
Маска выделяет нужный бит. В данном случае самый младший.
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 23:17  [ТС]     Программа перевода целого числа без знака в двоичную систему счисления #15
Цитата Сообщение от zss Посмотреть сообщение
не просто 1, а 0000000000000000000000000000000000000000000000000000000000000001
Маска выделяет нужный бит. В данном случае самый младший.

А почему именно такое количество нулей?
А если я напишу unsigned displayMask=1<<15; - что это будет означать ?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
23.09.2013, 17:08     Программа перевода целого числа без знака в двоичную систему счисления #16
Цитата Сообщение от VASYA_A Посмотреть сообщение
А если я напишу unsigned displayMask=1<<15; - что это будет означать ?
Единица будет стоять в 16 разряде (0x00008000 в 16-ичной системе счисления).
Цитата Сообщение от VASYA_A Посмотреть сообщение
А почему именно такое количество нулей?
В двоичной системе счисления (или 0x00000001 в 16-ичной)
VASYA_A
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
23.09.2013, 17:33  [ТС]     Программа перевода целого числа без знака в двоичную систему счисления #17
Цитата Сообщение от zss Посмотреть сообщение
Единица будет стоять в 16 разряде (0x00008000 в 16-ичной системе счисления).

В двоичной системе счисления (или 0x00000001 в 16-ичной)
А сколько вообще занимает битов displayMask ( в двоичной системе счисления) ?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
23.09.2013, 18:46     Программа перевода целого числа без знака в двоичную систему счисления #18
unsigned integer для компилятора Visual Studio занимает 4 байта(32 бита).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2013, 20:24     Программа перевода целого числа без знака в двоичную систему счисления
Еще ссылки по теме:

Программа перевода целого числа без знака в двоичную систему счисления C++
Программа для перевода заданного числа в троичную систему счисления C++
Программа для перевода из десятичной системы счисления в двоичную C++

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

Или воспользуйтесь поиском по форуму:
Croessmah
23.09.2013, 20:24     Программа перевода целого числа без знака в двоичную систему счисления
  #19

Не по теме:

Цитата Сообщение от zss Посмотреть сообщение
unsigned integer для компилятора Visual Studio занимает 4 байта(32 бита).
а если поставить x64 конфигурацию?

Yandex
Объявления
23.09.2013, 20:24     Программа перевода целого числа без знака в двоичную систему счисления
Ответ Создать тему
Опции темы

Текущее время: 03:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru