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

Программа для перевода чисел из 10 системы в 2 - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 93, средняя оценка - 4.94
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
29.08.2010, 22:56     Программа для перевода чисел из 10 системы в 2 #1
Народ помогите написать программу для перевода чисел из 10 системы в двоичную
В консоле
Если надо я могу прислать листинг программы которую я пытался создать
Заранее спасибо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2010, 22:56     Программа для перевода чисел из 10 системы в 2
Посмотрите здесь:

Написать функцию со сменным числом параметров для перевода чисел из двичной системы счисления в троичную C++
C++ Программа для перевода из одной системы счисления в другую.
Программа для перевода чисел из 10сс в 2сс C++
Составить программу для перевода чисел из шестнадцатеричной системы счисления в двоичную(с++) C++
Программа перевода числа из десятичной системы в восмеричную C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 22:57     Программа для перевода чисел из 10 системы в 2 #2
JerryJackson, Кидай листинг
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.08.2010, 22:57     Программа для перевода чисел из 10 системы в 2 #3
Программа перевода числа из 10 СС в 2 СС
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
29.08.2010, 23:02  [ТС]     Программа для перевода чисел из 10 системы в 2 #4
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/ lab1.cpp : Defines the entry point for the console application.
//
 
#include "stdio.h"
 
void main()
{
    //Переменные для исходных данных
    int x = 0, y = 0, m = 0, n = 0;
 
    //Переменные для результатов
    int x_new = 0, y_new = 0;
 
    //Временные переменные
    unsigned int mask;
    const unsigned int all_bits_up = -1; // -1 записуется в памяти как все биты равные 1 [url]http://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа[/url])
 
    //запрашиваем ввод
    printf("input values for 'x', 'y', 'm' and 'n' separated by spaces\nwaiting for input# ");
    //считываем ввод
    scanf("%d%d%d%d",&x, &y, &m, &n);
    
    //выводим исходные данные
    printf("\n\nYou've just inputed next values:\n x = '%d'\n y = '%d'\n m = '%d'\n n = '%d'\n", x, y, m, n);
 
    //подготавливаем маску
    //"a (*)= b" это то же самое что и "a = a (*) b" - вместо (*) подставить нужный оператор
    mask = all_bits_up; //включаем все биты
    mask <<= n;         //сдвигаем влево на n бит
    mask ^= -1;         //инвертируем (исключающее ИЛИ с универсальным множеством)
    mask <<= m;         //сдвигаем влево на m бит
 
    //Дальше нужно вырезать нужные биты их 'x' и 'y' и склеять их в 'x_new'
 
    //1)  0xCCCCCCCC  2)  0xAAAAAAAA  3)  0xCCCC00CC
    //   &               &               |
    //    0xFFFF00FF      0x0000FF00      0x0000AA00
    //   =               =               =
    //    0xCCCC00CC      0x0000AA00      0xCCCCAACC
 
 
    //mask ^ all_bits_up - инвертация маски
    //x & ( mask ^ all_bits_up ) - все биты из 'x' которые равны '1' в инвертированой маске
    //y & mask - все биты их 'y' которые равны '1' в неинвертированой маске
    //x & ( mask ^ all_bits_up ) | y & mask - наложение результата друг на друга
    x_new = x & ( mask ^ all_bits_up ) | y & mask;
 
 
    //теперь нужно получить маску из единиц и шести нулей в конце
    mask = all_bits_up; //все единицы
    mask >>= 6;         //сдвигаем на 6 вправо, что бы получить нули в конце
    y_new = y | ( mask ^ all_bits_up ); //логическое ИЛИ с маской оставит исходные биты в тех местах где в маске '1' и перетрет нулем в тех где '0'
 
    //теперь нужно вывести побитово в столбик старые и новые значения
    for (unsigned int i = 0 ; i < sizeof(int) * 8 ; i++)
    {
        //сдвигаем единичку на текущее значение i что бы проверить какое значение текущего бита каждого значения
 
        // 1010 & 0010 != 0 но 1001 & 0010 == 0
        int next_bit_x      = ( ( 1 << i ) & x) ? 1 : 0;
        int next_bit_y      = ( ( 1 << i ) & y) ? 1 : 0;
        int next_bit_x_new  = ( ( 1 << i ) & x_new) ? 1 : 0;
        int next_bit_y_new  = ( ( 1 << i ) & y_new) ? 1 : 0;
 
        if (i == 0)
        {
            printf("\nx(old): %d y(old): %d x(new): %d y(new): %d\n", 
                next_bit_x,
                next_bit_y,
                next_bit_x_new,
                next_bit_y_new);
        }
        else
        {
            //каждые четыре строчки выводим разделитель
            if ( i % 4 == 0) //оператор % это остаток от деления по модулю
            {
                printf("[%d-%d]\n", i, i + 3);
            }
 
            printf("        %d         %d         %d         %d\n", 
                next_bit_x,
                next_bit_y,
                next_bit_x_new,
                next_bit_y_new);
        }
    }
}
Добавлено через 41 секунду
Лабораторная работа№1. Вариант 1 – (2009)
Написать программу на языке C++, читающую со стандартного ввода 4 деся-
тичных числа x, y,m, n. Все смещения будут указываться начиная с младшего
бита, начиная с 0.
Из числа y n бит начиная с m-го поместить в соответствующие биты в x, и
установить в ‘1’ значения 6 старших бит в y.
Программа должна вывести все исходные данные в десятичном виде,
исходные и полученные значения x, y в двоичном виде в столбик, причём
справа от числа должно быть выведено имя соответствующей переменной.
В программе не должно быть более одного цикла. Не следует использовать
классы и библиотеки для работы с битовыми объектами. Рекомендуется не
изменять исходные переменные, следует определить выходные и временные
переменные. Программа должна быть корректной вне зависимости от коли-
чества бит в целом числе на данной архитектуре.

Добавлено через 39 секунд
вот листинг но программа работает неправильно
а иногда вообще не работает
iama
 Аватар для iama
1249 / 974 / 48
Регистрация: 30.07.2010
Сообщений: 5,297
29.08.2010, 23:03     Программа для перевода чисел из 10 системы в 2 #5
JerryJackson, рабочий пример:
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
#include <stdio.h>   
#include <conio.h>   
#include <math.h>   
  
void dvoich(int x1)   
{  
    int i, b;  
    long c = 0;  
    for(i=0;x1 > 0;i++)  
    {
        b = x1 % 2;  
        x1 = (x1-b)/2;
        c += b * pow(10,i);
    }
 
    printf("\nDvoichnoe chislo: %d",c);   
}   
  
void main()   
{
    int a;  
    printf("Vvedite desyatichnoe chislo:");  
    scanf("%d",&a);  
    dvoich(a);  
    getch();  
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 23:06     Программа для перевода чисел из 10 системы в 2 #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string>
#include <algorithm>
 
int main()
{
   int n;
   std::cout<<"Enter n: ";
   std::cin>>n;
   std::string Bin="";
   while(n>0)
   {
      if(n%2)
         Bin+='1';
      else
         Bin+='0';
      n/=2;
   }
   std::reverse(Bin.begin(), Bin.end());
   std::cout<<Bin;
   return 0;
}
iama, Вашу программу не схавала 2005 VS. Не стоит использовать такую версию функции pow(int, int). Лучше уж pow(double, int). То есть в данном случае pow(10.0, i).
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.08.2010, 23:08     Программа для перевода чисел из 10 системы в 2 #7
iama, как будет работать ваш код для числа 2048? Правильно - он упадет.
Lavroff, а как же битовые операции?
JerryJackson, перейдите по ссылке в 3 посте и пользуйтесь поиском
JerryJackson
50 / 6 / 1
Регистрация: 15.07.2010
Сообщений: 112
29.08.2010, 23:11  [ТС]     Программа для перевода чисел из 10 системы в 2 #8
спасибо всем огромное
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 23:12     Программа для перевода чисел из 10 системы в 2 #9
M128K145, А собственно зачем?)
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.08.2010, 23:12     Программа для перевода чисел из 10 системы в 2 #10
Lavroff, а зачем применять арифметику, если можно сделать битовый сдвиг?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 23:29     Программа для перевода чисел из 10 системы в 2 #11
M128K145, Можно. Но если не критично для памяти/времени работы/всего остального, то зачем оптимизировать и делать код несколько менее понятным?

C++
1
2
3
4
5
6
7
8
   while(n>0)
   {
      if(n&1)
         Bin+='1';
      else
         Bin+='0';
      n>>=1;
   }
Только зачем? Разве это более понятно? Особенно тем кто не знает побитовые операции?
M128K145
Эксперт C++
 Аватар для M128K145
8272 / 3491 / 142
Регистрация: 03.07.2009
Сообщений: 10,707
29.08.2010, 23:37     Программа для перевода чисел из 10 системы в 2 #12
А что в этом коде непонятного или сложного?
C++
1
2
3
4
for(i = 31; i >= 0; --i)
     Bin += (char)(((chislo >> i) & 1) + 48);
     // или так
     // Bin += (chislo >> i) & 1 ? '1' : '0';
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
29.08.2010, 23:46     Программа для перевода чисел из 10 системы в 2 #13
Цитата Сообщение от M128K145 Посмотреть сообщение
А что в этом коде непонятного или сложного?
Ну вот число 48 лучше все таки записать как символ '0'.
Может быть еще i = sizeof(T) * 8 - 1. ну это уже не суть. Предварительно выделив в шаблонную функцию
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
29.08.2010, 23:48     Программа для перевода чисел из 10 системы в 2 #14
M128K145, Вцелом ничего. Но новичка запутает на 80%
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
30.08.2010, 00:07     Программа для перевода чисел из 10 системы в 2 #15
C++
1
2
3
4
5
6
7
8
9
10
const int a = 0x7145;
 
int main(){
  unsigned i,j = 1 << 8*sizeof(int)-1;
  for( i=0;i<8*sizeof(int);++i ){
    printf( "%d", (a & j) == 0 ? 0 : 1  );
    j >>= 1;
  }printf( "\n" );
  return 0;
}
перевод числа в двоичное
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
30.08.2010, 00:10     Программа для перевода чисел из 10 системы в 2 #16
Незнание битовых операций не освобождает отответственности.
Тема достаточно нетрудная, чтобы изучить её самостоятельно.
gangstaboy
1 / 1 / 0
Регистрация: 29.08.2010
Сообщений: 7
30.08.2010, 21:08     Программа для перевода чисел из 10 системы в 2 #17
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
main()
{
 int x,y;
 scanf ("%d",&x);
 while(x>=1)
 {
  y=x/2;
  printf("%d",x-2*y);
  x=y;
 }
  printf("\n");
getch();
}
только результат выводится в обратном порядке...
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
30.08.2010, 22:12     Программа для перевода чисел из 10 системы в 2 #18
вот ещё для разнообразия
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
#include <stdio.h>
#include <limits.h>
 
#define INT_BIT CHAR_BIT * sizeof(int)
#define GREAT_INT_BIT 1 << ( INT_BIT - 1 )
    
void bits_to_str(int val, unsigned int mask, char * buf){
    if ( ! mask ){
        *buf = '\0';
        return;
    }
    *buf = val & mask ? '1' : '0';
    bits_to_str(val, mask >> 1, ++buf);
}
    
int main(void){
    char buf[BUFSIZ];
    
    printf("Enter some values (empty string - exit)\n");
    while ( printf("> ") && fgets(buf, BUFSIZ, stdin) ){
        if ( *buf == '\n' )
            break;
        bits_to_str(atoi(buf), GREAT_INT_BIT, buf);
        printf("  %s\n", buf);
    }
    
    return 0;
}
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
31.08.2010, 00:09     Программа для перевода чисел из 10 системы в 2 #19
А как насчёт независимости от количества бит на платформах? Кто-то может прокомментировать данный ньюанс? у easubudda вроде есть define соответствующий,но я толком не понял,как он используется
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2010, 00:21     Программа для перевода чисел из 10 системы в 2
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.08.2010, 00:21     Программа для перевода чисел из 10 системы в 2 #20
Цитата Сообщение от #pragma Посмотреть сообщение
у easubudda вроде есть define соответствующий,но я толком не понял,как он используется
CHAR_BIT определено в limits.h
INT_BIT определяет количество бит в переменной типа int
GREAT_INT_BIT устанавливает в единицу старший бит в переменной типа int
У меня там тот косяк, что размер выходного буфера никак не проверяется, поэтому он должен быть определён как минимум так:
C
1
char buf[INT_BIT + 1];
Yandex
Объявления
31.08.2010, 00:21     Программа для перевода чисел из 10 системы в 2
Ответ Создать тему
Опции темы

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