Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/103: Рейтинг темы: голосов - 103, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 15.12.2017
Сообщений: 8
1

Перевод из двоичной системы счисления в десятичную

31.05.2018, 10:03. Показов 19132. Ответов 6
Метки нет (Все метки)

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 <iostream>
#include <cmath>
#include <cstring>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <locale>
 
using namespace std;
 
int main()
{   setlocale(LC_ALL, "rus");
   int j = 1;
   int Chislo = 0;
   char str[64]; // строка для числа в 2 СС
    printf("Введите число в двоичной системе счисления:\n");
    scanf("%s", str);
    for ( int i = 0; i < strlen(str); i++) {           // Сама функция перевода
        str[i]= str[i] * pow(2,strlen(str)- j);       //Алгоритм
        Chislo = Chislo + str[i];                    //перевода
        j++;
    }                                          
    cout << " strlen(str)" <<  strlen(str);
cout << "\n";
        cout <<"В десятичной системе счисления это будет: \n"<< Chislo; 
    return 0;
}
Прошелся логически по задаче , но так и не нашел в чем не прав. Числа выдает неверные
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2018, 10:03
Ответы с готовыми решениями:

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

Перевод из двоичной системы счисления в десятичную
Я создал программу, но вот она выдает размерность введенного массива, вместо десятичного числа....

Перевод из двоичной системы счисления в десятичную
Почему самописная функция long long int From2to10(string s) { long long int r = 0; int i, j...

Перевод из двоичной системы счисления в десятичную
Как перевести число из двоичной системы счисления в десятичную?

6
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
31.05.2018, 10:08 2
В 20-й строке ты код символа умножаешь, и какая ещё pow() в целочисленной арифметике?
Плюс будет переполнение, если число длиннее 8 бит.
1
0 / 0 / 0
Регистрация: 15.12.2017
Сообщений: 8
31.05.2018, 10:27  [ТС] 3
Если у меня число в двоичной СС = 11 ;
то в 10 будет 1*2^1 + 1*2^0;
Как же мне обойтись без pow() ?
А насчет кода символа совсем не понял , по моим предположения str[i] должно было быть одним символом бинарного числа
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
31.05.2018, 10:46 4
Цитата Сообщение от RotInPaces Посмотреть сообщение
Как же мне обойтись без pow() ?
Использовать переменную целого типа и умножать на 2 в каждой итерации.
Цитата Сообщение от RotInPaces Посмотреть сообщение
str[i] должно было быть одним символом бинарного числа
Вот именно - символом: '1' != 1.
1
Модератор
Эксперт С++
11102 / 9148 / 5498
Регистрация: 18.12.2011
Сообщений: 24,443
31.05.2018, 10:46 5
Лучший ответ Сообщение было отмечено RotInPaces как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <clocale>
using namespace std;
 
int main()
{   
    setlocale(LC_ALL, "rus");
    int j = 1;
    int Chislo = 0;
    char str[64]; // строка для числа в 2 СС
    cout<<"Введите число в двоичной системе счисления:\n";
    cin>>str;
    for ( int i = 0; i < strlen(str); i++) 
    {
        Chislo*=2;
        Chislo += str[i]-'0';  // '0'-'0' равно 0, '1'-'0' Равно 1
    }                                          
    cout <<"В десятичной системе счисления это будет: "<< Chislo<<endl; 
    system("pause");
    return 0;
}
Важное замечание:
Мы переводим строковое двоичное представление в БИНАРНОЕ компьютерное представление.
А в десятичную систему переводит operator<<
C++
1
cout << Chislo;
1
0 / 0 / 0
Регистрация: 08.11.2020
Сообщений: 15
17.03.2021, 14:07 6
Цитата Сообщение от zss Посмотреть сообщение
Chislo*=2;
        Chislo += str[i]-'0';
можете объяснить как работают и что делают эти строки?
0
2092 / 1023 / 385
Регистрация: 08.11.2016
Сообщений: 2,934
17.03.2021, 15:31 7
Цитата Сообщение от vohkorog Посмотреть сообщение
можете объяснить как работают и что делают эти строки?
умножение числа на 2, по сути для двоичного числа осуществляет побитовый сдвиг в сторону старших разрядов, более наглядно будет делать так:
C++
1
2
3
Chislo = 10; // в двоичной СС 1010
Chislo <<= 1; // сдвинуть на 1 бит влево, получится 10100
Chislo *= 2; // умножить на 2 (равносильно сдвигу на один бит влево) 101000
Далее к числу прибавляется код текущего символа строки минус код символа '0' - это такое тривиальное преобразование числа из символьного представления в численный, типа того:
символ '0' - код ASCII 48, символ '1' - код ASCII 49 и т.д.
'0' - '0' = 0;
'1' - '0' = 1;
'2' - '0' = 2;
.............
.............
'9' - '0' = 9;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2021, 15:31

Перевод из двоичной системы счисления в десятичную
Помогите пожалуйста перевести число из 2-ой сс в 10 сс. Буду очень благодарен:)

Перевод из двоичной системы счисления в десятичную
Программа не работает для отрицательных чисел. Помогите найти ошибку. #include &quot;stdafx.h&quot;...

Рекурсивный перевод из двоичной системы счисления в десятичную
Вот мой код: #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std;...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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