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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.65
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
#1

Необходимо вывести двоичное представление числа на экран. - C++

16.02.2014, 13:12. Просмотров 3613. Ответов 20
Метки нет (Все метки)

Собственно само задание..
Код вроде вполне правильный, но все же не работает((
Не могу понять в чем проблема..
Прошу руку помощи))

С клавиатуры вводится целое число. Необходимо вывести его двоичное представление на экран.
Программа должна поддерживать все целочисленные типы данных языка реализации (char, int, long int, unsigned int, unsigned long int для языка C/C++, integer, byte, word, shorting, longint для Pascal/Delphi).
Отрицательные числа выводятся в дополнительном коде.
Необходимо также решить обратную задачу: преобразовать двоичное число в десятичный вид.
Замечания:
1. Дополнительный код образуется из прямого путем инверсии бит и прибавления единицы:
Пример: -5: 5 = 00000101, -5 = not(5)+1 = 11111010+1 = 11111011
2. Запрещается использовать для машинно-зависимые методы и библиотеки языков программирования.
1. В качестве одного из вариантов решения предлагается следующие алгоритм на псевдоязыке:

Код
program Translate1;
s : string;
begin
 enter(a);
 s:=’’;
 while a<>0 do
   if  (abs(a) mod 2) then s:=’1’+s else s:=’0’+s;
   a:=abs(a) div 2;
 end while;
 if a<0 then
  mind:=0;
  for i:=1 to 8 do
    k:=val(s[8-i+1])+1+mind;
    s[8-i+1]:=k;
    if k=2 then begin
      s[8-i+1]:=’0’; mind:=1;
    endif  
    if k=3 then begin
      s[8-i+1]:=’1’; mind:=1;
    endif  
  endfor
 endif
end;
где div и mod  - операции целочисленного деления и деления по модулю соответственно.
 
program Translate1;
s : string;
begin
 enter(a);
 s:=’’;
 while a<>0 do
   if  (abs(a) shr 1) and (1 shl (sizeof(a)+1) + 1) then s:=’1’+s else s:=’0’+s;
   a:=abs(a) shr 2;
 end while;
 if a<0 then
  mind:=0;
  for i:=1 to 8 do
    k:=val(s[8-i+1])+1+mind;
    s[8-i+1]:=k;
    if k=2 then begin
      s[8-i+1]:=’0’; mind:=1;
    endif  
    if k=3 then begin
      s[8-i+1]:=’1’; mind:=1;
    endif  
  endfor
 endif
end;
где shr и sizeof - операции сдвига вправо и определения размера типа в битах соответственно.

А вод и код:
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include"stdafx.h"
#include<iostream>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int main(void)
{ 
char *end; //указатель на последний символ строки
char str[32];
int k;
char str2[10];//строка с наибольшим числом
 
for (int i = 0; i <= 31; ++i)
str[k] = '0';
cout << "Vvedite desiatichnoe chislo:\n";
cin >> str2;
if (str2[0]=='-')
{
long int bb=strtol(str2,&end,10);//строку str2 по основанию 10, т.е. переводим в десят систему
k=31;
while (bb != 0)
{
if ((bb % 2) != 0)
str[k] = '1';
--k;
bb = bb / 2;
}
 
for ( k=0;k<=31;k++)
{
if (str[k]!='1')
str[k]='1';
else
str[k]='0';
};
 
for (int i=31;i>=0;i--)
{
if (str[k]=='1')
str[k]='0';
else
{str[k]='1';
break;}
}
 
}
else
{ unsigned long int bb=strtoul(str2,&end,10);
k=31;
while (bb != 0)
{
if ((bb % 2) != 0)
str[k] = '1';
--k;
bb = bb / 2;
}
};
cout << "Chislo v desiatichnoi sisteme schislenia: "<<endl;
for (int i=0;i<=31;i++)
cout<<str[k];
cout<<endl;
 
{char str3[32];
char str[32];
long tmp = 0;//отрицательное
unsigned long int ptr=0;//положительное
for (int i = 0; i <= 31; ++i)
str[k] = '0';
cout<<"Vvedite chislo v dvoichnoi sisteme schislenia:\n"<<endl;;
cout<<"********************************"<<endl;
cout<<"\n";
cin>>str3;
{int k=0;
for(int i=31,k=strlen(str3)-1;i>=0;i--,k--)//весь массив заполняем нулями
{str[k]=str3[k];//а введенное число заносим в конец
if (k==0)
break;}
 
cout<<"Chislo v desiatichnoi sisteme (polo)I(itel'noe):\n";
for ( int i = 31, k = 0; i >= 0; i--, k++)
ptr= ptr + (str[k] - '0') * pow(2,k);//переводим двоичное число в положительное десятичное
cout<<ptr<<"\n"<<endl; //через степень числа 2
 
for ( k=0;k<=31;k++)
{
if (str[k]!='1')//инвертируем введенное двоичное число
str[k]='1';//0 меняем на 1 и наоборот
else
str[k]='0';
}
 
for (int i = 31, k = 0; i >= 0; i--, k++)
tmp = tmp + (str[k] - '0') * pow(2,k);
tmp=(tmp+1)*(-1); //прибавляем единицу по правилу
 
if (tmp<0)
{cout<<"Chislo v desiatichnoi sisteme(otricatel'noe):\n";
cout<<tmp<<endl;}}} //выводим отрицательное число
 
 
getchar();
system("pause");
}
Добавлено через 11 часов 47 минут
прошу Вас о помощи
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.02.2014, 13:12     Необходимо вывести двоичное представление числа на экран.
Посмотрите здесь:

Двоичное представление типов данных C++
Определить, является ли симметричным двоичное представление длинного целого числа C++
C++ двоичное представление
Вывести на экран шестнадцатеричное представление натурального числа C++
C++ Программа показывающая внутреннее двоичное представление типа данных
Двоичное представление символов ASCII C++
C++ Двоичное представление символов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
17.02.2014, 23:17  [ТС]     Необходимо вывести двоичное представление числа на экран. #2
заплачу, если надо будет

Добавлено через 3 часа 43 минуты
БЛИИН помогите пожалуйста
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
17.02.2014, 23:50     Необходимо вывести двоичное представление числа на экран. #3
Хм. Ну давайте по очереди:
Функция принимает 2 аргумента: 1 - строка, в которую будет записан результат, 2 - число в любом из целочисленных форматов.
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
template<typename T>
void NumberAsBinary(char *_result, T _number)
{
    short int j = 0;
    if (_number > 0)//Если положительное
        for (T i = _number; i != 0; i /= 2, j++)
            _result[j] = ((_number^i) > _number) ? '0' : '1';
    else//Если отрицательное
    {
        _number *= -1;
        for (T i = _number; i != 0; i /= 2, j++)
            _result[j] = ((_number^i) > _number) ? '1' : '0';
        if (_result[j-1] == '1')//Прибавление 1
        {
            for (int i = j-1; i != -1; i--)
            {
                if (_result[i] == '1')
                    _result[i] = '0';
                else
                {
                    _result[i] = '1';
                    break;
                }
            }
        }
        else
            _result[j - 1] = '1';
    }
    _result[j] = 0;
}
Например из функции мейн вызывает:
C++
1
2
3
    char res[15];
    long dec = -56;
    NumberAsBinary(res, dec);
И после выполнения функции в строку res будет записано двоичное представление числа dec.
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
17.02.2014, 23:54  [ТС]     Необходимо вывести двоичное представление числа на экран. #4
Alex566, не могли бы Вы отредактировать мой код?
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 00:20     Необходимо вывести двоичное представление числа на экран. #5
Ну ладно.
1. перевод положительного числа в двоичную систему исчисления происходит правильно. Не понятно только почему при выводе вы выводите строку по символьно циклично + в цикле выводится все время один и тот же символ k. На 17 строке измените на
C++
1
2
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
, а на 63 на
C++
1
2
    for (int i = 0; i <= 31; i++)
        cout << str[i];
Да и число выводится в двоичной системе исчисления а написано что в десятичной.
Смотрю дальше..
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 00:29  [ТС]     Необходимо вывести двоичное представление числа на экран. #6
Alex566, из двоичной в десятичную не правильно переводит. Спасибо, что помогаете)
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 00:32     Необходимо вывести двоичное представление числа на экран. #7
2. Отрицательное число переводит в обратный код а не в дополнительный по той же самой причине:
C++
1
2
3
4
5
6
7
8
9
10
for (int i = 31; i >= 0; i--)
        {
            if (str[k] == '1')
                str[k] = '0';
            else
            {
                str[k] = '1';
                break;
            }
        }
За итератор взята переменная i, а обращение каждый раз происходит к элементу с индексом k, который даже не изменяется никак в ходе выполнения цикла.
Надо исправить на:
C++
1
2
3
4
5
6
7
8
9
for (int i = 31; i >= 0; i--)
        {
            if (str[i] == '1')
                str[i] = '0';
            else
            {
                str[i] = '1';
                break;
            }
И будет корректно выводиться число в дополнительном коде.

Добавлено через 2 минуты
На текущий момент код выглядит так:
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include<iostream>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std;
 
int main(void)
{
    char *end; //указатель на последний символ строки
    char str[32];
    int k;
    char str2[10];//строка с наибольшим числом
 
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
    cout << "Vvedite desiatichnoe chislo:\n";
    cin >> str2;
    if (str2[0] == '-')
    {
        int bb = strtol(str2, &end, 10);//строку str2 по основанию 10, т.е. переводим в десят систему
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
 
        for (k = 0; k <= 31; k++)
        {
            if (str[k] != '1')
                str[k] = '1';
            else
                str[k] = '0';
        };
 
        for (int i = 31; i >= 0; i--)
        {
            if (str[i] == '1')
                str[i] = '0';
            else
            {
                str[i] = '1';
                break;
            }
        }
 
    }
    else
    {
        unsigned long int bb = strtoul(str2, &end, 10);
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
    };
    cout << "Chislo v dvoichnoi sisteme schislenia: " << endl;
    for (int i = 0; i <= 31; i++)
        cout << str[i];
    /*
    char str3[32];
    char str[32];
    long tmp = 0;//отрицательное
    unsigned long int ptr = 0;//положительное
    for (int i = 0; i <= 31; ++i)
        str[k] = '0';
    cout << "Vvedite chislo v dvoichnoi sisteme schislenia:\n" << endl;;
    cout << "********************************" << endl;
    cout << "\n";
    cin >> str3;
    int k = 0;
    for (int i = 31, k = strlen(str3) - 1; i >= 0; i--, k--)//весь массив заполняем нулями
    {
        str[k] = str3[k];//а введенное число заносим в конец
        if (k == 0)
            break;
    }
 
    cout << "Chislo v desiatichnoi sisteme (polo)I(itel'noe):\n";
    for (int i = 31, k = 0; i >= 0; i--, k++)
        ptr = ptr + (str[k] - '0') * pow(2, k);//переводим двоичное число в положительное десятичное
    cout << ptr << "\n" << endl; //через степень числа 2
 
    for (k = 0; k <= 31; k++)
    {
        if (str[k] != '1')//инвертируем введенное двоичное число
            str[k] = '1';//0 меняем на 1 и наоборот
        else
            str[k] = '0';
    }
 
    for (int i = 31, k = 0; i >= 0; i--, k++)
        tmp = tmp + (str[k] - '0') * pow(2, k);
    tmp = (tmp + 1)*(-1); //прибавляем единицу по правилу
 
    if (tmp<0)
    {
        cout << "Chislo v desiatichnoi sisteme(otricatel'noe):\n";
        cout << tmp << endl;
    }
     //выводим отрицательное число
    */
    system("pause");
}
Закомментировал не проверенную область в которой к тому же были ошибки с расстановкой фигурных скобок.
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 00:45  [ТС]     Необходимо вывести двоичное представление числа на экран. #8
Alex566, Александр, не смогли, бы Вы доделать мой код?
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 00:53     Необходимо вывести двоичное представление числа на экран. #9
Masha_She, ну это все не за секунды делается. К тому же обратный перевод у вас действительно запутанный.
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 00:58  [ТС]     Необходимо вывести двоичное представление числа на экран. #10
Alex566, ну пожааалуйста)) Вы очень добрый молодой человек) Помогите пожалуйста) Буду очень благодарна.
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 01:13     Необходимо вывести двоичное представление числа на экран. #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
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
89
90
91
92
93
94
95
96
97
98
99
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale>
using namespace std;
 
int main(void)
{
    setlocale(0, "");
    char *end; //указатель на последний символ строки
    char str[32];
    int k;
    char str2[10];//строка с наибольшим числом
 
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
    cout << "Введите десятичное число: ";
    cin >> str2;
    if (str2[0] == '-')
    {
        long int bb = strtol(str2, &end, 10);//строку str2 по основанию 10, т.е. переводим в десят систему
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
 
        for (k = 0; k <= 31; k++)
        {
            if (str[k] != '1')
                str[k] = '1';
            else
                str[k] = '0';
        };
 
        for (int i = 31; i >= 0; i--)
        {
            if (str[i] == '1')
                str[i] = '0';
            else
            {
                str[i] = '1';
                break;
            }
        }
 
    }
    else
    {
        unsigned long int bb = strtoul(str2, &end, 10);
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
    };
    cout << "Число в двоичной системе исчисления: ";
    for (int i = 0; i <= 31; i++)
        cout << str[i];
    char str3[32];
    long tmp = 0;//отрицательное
    unsigned long int ptr = 0;//положительное
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
    cout << endl << "Введите чиcло в двоичной системе исчисления: ";
    cin >> str3;
    for (int i = 31, k = strlen(str3) - 1; i >= 0 && k >= 0; i--, k--)//весь массив заполняем нулями
        str[i] = str3[k];//а введенное число заносим в конец
    cout << "Число в тесятичной системе исчисления (положительное): ";
    for (int i = 31, k = 0; i >= 0; i--, k++)
        ptr = ptr + (str[i] - '0') * pow(2, k);//переводим двоичное число в положительное десятичное
    cout << ptr << endl; //через степень числа 2
    //---------------------
    for (k = 0; k <= 31; k++)
    {
        if (str[k] != '1')//инвертируем введенное двоичное число
            str[k] = '1';//0 меняем на 1 и наоборот
        else
            str[k] = '0';
    }
 
    for (int i = 31, k = 0; i >= 0; i--, k++)
        tmp = tmp + (str[k] - '0') * pow(2, k);
    tmp = (tmp + 1)*(-1); //прибавляем единицу по правилу
 
    if (tmp<0)
    {
        cout << "Число в десятичной системе исчисления (отрицательное):\n";
        cout << tmp << endl;
    }
     //выводим отрицательное число
    system("pause");
}
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 01:17  [ТС]     Необходимо вывести двоичное представление числа на экран. #12
Alex566, не хочу показаться наглой, но пожалуйста сможете до конца доделать?))
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 01:25     Необходимо вывести двоичное представление числа на экран. #13
Программа переводит из десятичной в двоичную положительные и отрицательные числа. И двоичные переводит в десятичную но мне не понятен принцип по которому программа определяет положительное это двоичное число или отрицательное. В остальном программа работает (не учитывая то что написана она кривовато) но я просто сделал чтобы она работала.

Добавлено через 8 минут
Все теперь полностью работает
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
89
90
91
92
93
94
95
96
97
98
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale>
using namespace std;
 
int main(void)
{
    setlocale(0, "");
    char *end; //указатель на последний символ строки
    char str[32];
    int k;
    char str2[10];//строка с наибольшим числом
 
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
    cout << "Введите десятичное число: ";
    cin >> str2;
    if (str2[0] == '-')
    {
        long int bb = strtol(str2, &end, 10);//строку str2 по основанию 10, т.е. переводим в десят систему
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
 
        for (k = 0; k <= 31; k++)
        {
            if (str[k] != '1')
                str[k] = '1';
            else
                str[k] = '0';
        };
 
        for (int i = 31; i >= 0; i--)
        {
            if (str[i] == '1')
                str[i] = '0';
            else
            {
                str[i] = '1';
                break;
            }
        }
 
    }
    else
    {
        unsigned long int bb = strtoul(str2, &end, 10);
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
    };
    cout << "Число в двоичной системе исчисления: ";
    for (int i = 0; i <= 31; i++)
        cout << str[i];
    char str3[32];
    long tmp = 0;//отрицательное
    unsigned long int ptr = 0;//положительное
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
    cout << endl << "Введите число в двоичной системе исчисления: ";
    cin >> str3;
    for (int i = 31, k = strlen(str3) - 1; i >= 0 && k >= 0; i--, k--)//весь массив заполняем нулями
        str[i] = str3[k];//а введенное число заносим в конец
    cout << "Число в десятичной системе исчисления (положительное): ";
    for (int i = 31, k = 0; i >= 0; i--, k++)
        ptr = ptr + (str[i] - '0') * pow(2, k);//переводим двоичное число в положительное десятичное
    cout << ptr << endl; //через степень числа 2
    for (k = 0; k <= 31; k++)
    {
        if (str[k] != '1')//инвертируем введенное двоичное число
            str[k] = '1';//0 меняем на 1 и наоборот
        else
            str[k] = '0';
    }
 
    for (int i = 31, k = 0; i >= 0; i--, k++)
        tmp = tmp + (str[i] - '0') * pow(2, k);
    tmp = (tmp + 1)*(-1); //прибавляем единицу по правилу
 
    if (tmp<0)
    {
        cout << "Число в десятичной системе исчисления (отрицательное): ";
        cout << tmp << endl;
    }
     //выводим отрицательное число
    system("pause");
}
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 01:28     Необходимо вывести двоичное представление числа на экран. #14
Вот
Миниатюры
Необходимо вывести двоичное представление числа на экран.  
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 01:40  [ТС]     Необходимо вывести двоичное представление числа на экран. #15
Alex566, я вот тоже задалась таким вопросом, что такое число в десятичной системе исчисления(положительное).. оно должно выводиться вообще?

Добавлено через 6 минут
Alex566, я имею ввиду то, что должно выводиться 1 решение.. Например,
Ввести число в двоич системе:1111
Оно должно выводить,
Десятичное число: -1
Чтобы был только ответ..
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 01:48     Необходимо вывести двоичное представление числа на экран. #16
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ну тогда сделайте так:
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
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <locale>
using namespace std;
 
int main(void)
{
    setlocale(0, "");
    char *end; //указатель на последний символ строки
    char str[32];
    int k;
    char str2[10];//строка с наибольшим числом
 
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
    cout << "Введите десятичное число: ";
    cin >> str2;
    if (str2[0] == '-')
    {
        long int bb = strtol(str2, &end, 10);//строку str2 по основанию 10, т.е. переводим в десят систему
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
 
        for (k = 0; k <= 31; k++)
        {
            if (str[k] != '1')
                str[k] = '1';
            else
                str[k] = '0';
        };
 
        for (int i = 31; i >= 0; i--)
        {
            if (str[i] == '1')
                str[i] = '0';
            else
            {
                str[i] = '1';
                break;
            }
        }
 
    }
    else
    {
        unsigned long int bb = strtoul(str2, &end, 10);
        k = 31;
        while (bb != 0)
        {
            if ((bb % 2) != 0)
                str[k] = '1';
            --k;
            bb = bb / 2;
        }
    };
    cout << "Число в двоичной системе исчисления: ";
    for (int i = 0; i <= 31; i++)
        cout << str[i];
    char str3[32];
    long tmp = 0;//отрицательное
    unsigned long int ptr = 0;//положительное
    for (int i = 0; i <= 31; ++i)
        str[i] = '0';
    cout << endl << "Введите чиcло в двоичной системе исчисления: ";
    cin >> str3;
    for (int i = 31, k = strlen(str3) - 1; i >= 0 && k >= 0; i--, k--)//весь массив заполняем нулями
        str[i] = str3[k];//а введенное число заносим в конец
    for (int i = 31, k = 0; i >= 0; i--, k++)
        ptr = ptr + (str[i] - '0') * pow(2, k);//переводим двоичное число в положительное десятичное
    for (k = 0; k <= 31; k++)
    {
        if (str[k] != '1')//инвертируем введенное двоичное число
            str[k] = '1';//0 меняем на 1 и наоборот
        else
            str[k] = '0';
    }
 
    for (int i = 31, k = 0; i >= 0; i--, k++)
        tmp = tmp + (str[i] - '0') * pow(2, k);
    tmp = (tmp + 1)*(-1); //прибавляем единицу по правилу
 
    if (tmp<0)
    {
        cout << "Число в десятичной системе исчисления (отрицательное): ";
        cout << tmp << endl;
    }
    else
    {
        cout << "Число в десятичной системе исчисления (положительное): ";
        cout << ptr << endl; 
    }
     //выводим отрицательное число
    system("pause");
}
Добавлено через 1 минуту
Первый бит знаковый, все стольные числовые.
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 01:53  [ТС]     Необходимо вывести двоичное представление числа на экран. #17
Alex566, последний вопрос) Можно каким-либо образом не писать все 32 знака. Например,
11111111111111111111111111111111
а написать например 1111???
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 02:03     Необходимо вывести двоичное представление числа на экран. #18
Цитата Сообщение от Masha_She Посмотреть сообщение
Alex566, последний вопрос) Можно каким-либо образом не писать все 32 знака. Например,
11111111111111111111111111111111
а написать например 1111???
Все остальные знаки примет за нули. Самый первый - знаковый бит.
Откуда у вас эта программа?
Masha_She
0 / 0 / 0
Регистрация: 12.11.2013
Сообщений: 31
18.02.2014, 02:38  [ТС]     Необходимо вывести двоичное представление числа на экран. #19
Alex566, тоесть никак нельзя поменять на 1111?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 02:40     Необходимо вывести двоичное представление числа на экран.
Еще ссылки по теме:

Получить двоичное строковое представление целого неотрицательного числа C++
C++ Двоичное представление double
C++ Двоичное представление
C++ Получить двоичное представление числа р в виде последовательности нулей и единиц
Двоичное представление числа C++

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

Или воспользуйтесь поиском по форуму:
Alex566
240 / 152 / 18
Регистрация: 03.04.2013
Сообщений: 317
18.02.2014, 02:40     Необходимо вывести двоичное представление числа на экран. #20
Цитата Сообщение от Masha_She Посмотреть сообщение
Alex566, тоесть никак нельзя поменять на 1111?
В смысле ограничить в 4 символа? И сделать максимальным числом 7?
Yandex
Объявления
18.02.2014, 02:40     Необходимо вывести двоичное представление числа на экран.
Ответ Создать тему
Опции темы

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