Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
1

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

22.09.2013, 14:36. Показов 3789. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте . Помогите , пожалуйста , реализовать программу перевода целого числа без знака в двоичную систему счисления , при этом выдать результат от младшего байта к старшему .
Объясните , пожалуйста , алгоритм решения . Всё облазил - не пойму , как это всё можно сделать.


Вот есть прога , но она выводит от старшего к младшему , а нужно наоборот
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;
 }
Заранее огромное спасибо за помощь !
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2013, 14:36
Ответы с готовыми решениями:

Программа перевода целого числа без знака в двоичную систему счисления
Здравствуйте . Помогите , пожалуйста , реализовать программу перевода целого числа без знака в...

Программа перевода в двоичную систему счисления
Программа должна работать с числами в int и float, но в случае с дробными (float) видит только...

Функция перевода восьмеричного числа в двоичную систему счисления
Разработать спецификации и написать функцию для перевода восьмеричного числа в двоичную систему...

Перевод целого числа в двоичную систему счисления
Вводится целое число n. Вывести это число в двоичной системе счисления!!...((( как?......

18
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
22.09.2013, 14:40 2
Немного о преобразовании чисел между системами счисления
0
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 14:54  [ТС] 3
Там про 16-ричную , мне бы с двоичной разобраться
0
193 / 170 / 32
Регистрация: 09.09.2013
Сообщений: 522
22.09.2013, 15:00 4
Цитата Сообщение от VASYA_A Посмотреть сообщение
unsigned c, displayMask=1 << 15;
Цитата Сообщение от VASYA_A Посмотреть сообщение
for (c=1; c<=16; c++)
что за магические числа такие 16 и 15? что они означают?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
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;
 }
1
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;
 }
Программа не правильно работает
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
22.09.2013, 16:50 7
Цитата Сообщение от VASYA_A Посмотреть сообщение
Программа не правильно работает
Я не нашел такого примера, для которого эта функция работает неправильно.
0
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 17:22  [ТС] 8
Цитата Сообщение от zss Посмотреть сообщение
Я не нашел такого примера, для которого эта функция работает неправильно.
Извините , виноват. Всё правильно работает .

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

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

Извините , за такие глупые вопросы , просто хочется разобраться нормально , а не тупо взять прогу .
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
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 << ' '; // для красоты восьмерки битов разделяем пробелами
     }
1
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
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 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 ;
}
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
22.09.2013, 18:28 12
Пример
Исходное число х
0110
Выделяем правый бит побитовым "и" с 0001, получаем 0
сдвигаем х вправо на один бит
0011
Выделяем правый бит побитовым "и" с 0001, получаем 1
снова сдвигаем х вправо на один бит
0001
Выделяем правый бит побитовым "и" с 0001, получаем 1
снова сдвигаем х вправо на один бит
0000
Выделяем правый бит побитовым "и" с 0001, получаем 0
x равно нулю - процесс окончен
0
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 ?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
22.09.2013, 21:08 14
Цитата Сообщение от VASYA_A Посмотреть сообщение
Так что такое displayMask=1 ?
не просто 1, а 0000000000000000000000000000000000000000000000000000000000000001
Маска выделяет нужный бит. В данном случае самый младший.
0
2 / 2 / 0
Регистрация: 11.09.2013
Сообщений: 129
22.09.2013, 23:17  [ТС] 15
Цитата Сообщение от zss Посмотреть сообщение
не просто 1, а 0000000000000000000000000000000000000000000000000000000000000001
Маска выделяет нужный бит. В данном случае самый младший.

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

В двоичной системе счисления (или 0x00000001 в 16-ичной)
А сколько вообще занимает битов displayMask ( в двоичной системе счисления) ?
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,712
23.09.2013, 18:46 18
unsigned integer для компилятора Visual Studio занимает 4 байта(32 бита).
0
Croessmah
23.09.2013, 20:24     Программа перевода целого числа без знака в двоичную систему счисления
  #19

Не по теме:

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2013, 20:24

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

составте программу перевода целого числа a, где a>0 в двоичную систему счисления
помогите пожалуйста, я ваще не могу понять, нужно сегодня срочно

Нужна программа перевода целого числа в двоичную систему исчисления на С++ Builder.
В общем я написал начало программы а часть кода где происходит вычисление с 10-й в 2-ю скопировал...

Программа перевода десятичного числа в двоичную систему счисления с использования стека
Доброго времени суток!) У меня тут такая проблема, нужно написать программу перевода десятичного...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru