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

Разработать алгоритм перевода двоичных чисел в десятичные числа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.59
green_apple
2 / 2 / 0
Регистрация: 24.06.2012
Сообщений: 64
02.07.2012, 23:43     Разработать алгоритм перевода двоичных чисел в десятичные числа #1
разработать алгоритм перевода двоичных чисел в десятичные числа
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2012, 23:43     Разработать алгоритм перевода двоичных чисел в десятичные числа
Посмотрите здесь:

C++ рекурсивна функция перевода двоичных цифр в десятичное
C++ Нужно написать программу перевода двоичных цифр в их шестнадцатиричный эквивалент (перевод числа оформить в виде функции)
Алгоритм перевода чисел C++
Алгоритм перевода чисел C++
C++ Дан массив упорядоченных по возрастанию целых чисел. разработать алгоритм бинарного поиска заданного числа, результат номер искомого числа или 0 если
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
03.07.2012, 00:27     Разработать алгоритм перевода двоичных чисел в десятичные числа #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
#include <cstdio>
 
bool bin2dec (const char* bin, unsigned& dec) {
  if (!bin) return false;
  unsigned bin_pow = 1;
  char sym; 
  dec = 0;
  for ( ; (sym = *bin) != '\0' ; ++bin) {
    bin_pow *= 2;
    switch (sym) {
      case '0': break;
      case '1': dec += bin_pow; break;
      default:  return false;
    }
  }
  return true;
}
 
int main() {
  unsigned res = 0;
  if (bin2dec("11010", res)) {
     printf ("%d\n", res);
  }
}
-=ЮрА=-
Заблокирован
Автор FAQ
03.07.2012, 09:48     Разработать алгоритм перевода двоичных чисел в десятичные числа #3

Не по теме:

alex_x_x, предположу что на линуксе или на чём разрабатывался код выше идёт порядок байт отличен от NT-ного.
http://codepad.org/nKq1eflh
"11010" == 26 а не 22 как подано в коде выше



green_apple, вот код для NT
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    char bin[256] = {0};
    cout<<"bin : ";
    cin>>bin;
    int len = strlen(bin);//ГіГ§Г*Г*ВёГ¬ äèëГ*Г*Гі ñòðîêè
    int pwr = 1;
    int dec = 0;
    for(int i = 0; i < len; i++)
    {
        dec += pwr*(bin[(len - 1) - i] - '0');
        pwr *= 2;
    }
    cout<<"dec : "<<dec<<endl;
    system("pause");
    return 0;
}
Миниатюры
Разработать алгоритм перевода двоичных чисел в десятичные числа  
alex_x_x
03.07.2012, 11:54
  #4

Не по теме:

-=ЮрА=-, да нет, естесственно форма в линуксе точно такая же)
совсем по-детски лоханулся=)

-=ЮрА=-
Заблокирован
Автор FAQ
03.07.2012, 15:00     Разработать алгоритм перевода двоичных чисел в десятичные числа #5
green_apple,
s=0
цикл 0-n
s=s+Ai*2^i
a0*2^0+a1*2^1+a3*2^3+.....
s=an
цикл
s=s*2+a(n-1)
У меня в программе тоже самое, только вместо 2^n у меня идёт
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
pwr
а само значение бита равно
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
(bin[(len - 1) - i] - '0');
Смотри если bin[(len - 1) - i] == '1' то int('1') = 49 если же ноль то int('0') == 48 получается
либо 49 - int('0') либо 48 - int('0') что соответсвует 1 или 0 в int
Вобщем у меня абсолютно твоя же логика просто pwr можно заменить на pow(2,i) а разницу char-ов как
C++
1
2
if(bin[(len - 1) - i] == '1') 
   dec += 1*pow(2,i);
-=ЮрА=-
Заблокирован
Автор FAQ
10.07.2012, 23:54     Разработать алгоритм перевода двоичных чисел в десятичные числа #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
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
#include <iostream>
using namespace std;
 
//функция переводит двоичное число заданное строкой str в 
//десятичное, флаг ipart указывает : 
//ИСТИНА - передана строка с целой частью
//ЛОЖЬ   - передана строка с дробной частью
double bin2dec(char * str, bool ipart);
 
int main()
{
    char ipart[256] = {0};//Будет содержать целую часть числа
    char fpart[256] = {0};//Будет содержать дробную часть числа
    cout<<"Enter binary : ";cin>>ipart;
    char * ptr = strchr(ipart,'.');//Ищем разделитель дробной части в числе
    if(ptr != NULL)
    {
        ipart[strlen(ipart) - strlen(ptr)] = '\0';//Обрезаем строку по запятую
        strcpy(fpart, ptr + 1);//Сдвигаемся в строке исключая из неё запятую
    }
    //Десятичное число
    double val = 0;
    val += bin2dec(ipart, true);//Преобразуем целую часть в десятичное
    val += bin2dec(fpart, false);//Если есть преобразуем дробную часть в десятичное
    cout<<"Decimal value : "<<val<<endl;
    system("pause");
    return 0;
}
 
double bin2dec(char * str, bool ipart)
{
    int i;
    int bit    = 0;//Значение бита
    int sLen   = 0;
    int pwr    = 1;
    double val = 0;
    if(str != NULL)//Если строка не пуста
    {
        sLen = strlen(str);//Узнаём разрядность числа
        for(i = 0; i < sLen; i++)
        {
            bit = 0;
            if(str[(sLen - 1) - i] == '1')
                bit = 1;
            if(ipart)
                val += bit*pwr;
            else
            if(bit == 1)//Исключаем деление на ноль
                val += 1.0/(bit*pwr);
            pwr = pwr*2;
        }
    }
    return val;
}
Миниатюры
Разработать алгоритм перевода двоичных чисел в десятичные числа  
Ksan
26 / 26 / 0
Регистрация: 02.11.2010
Сообщений: 370
11.07.2012, 00:11     Разработать алгоритм перевода двоичных чисел в десятичные числа #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
unsigned int B2D(char *bin)
{
        unsigned int val = 0;
        
        for(unsigned char i=0; i<strlen(bin); ++i)
        {
                val <<= 1;
                if(bin[i] == '1'){ val |= 0x1; continue; }
                if(bin[i] == '0') continue;
                return 0;
        }
        
        return val;
}
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
11.07.2012, 01:09     Разработать алгоритм перевода двоичных чисел в десятичные числа #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cstring>
using namespace std;
 
unsigned long long operator "" _b(const char* str)
{
   unsigned long long res = 0;   
   size_t size = strlen(str);
   for (size_t i = 0; i != size; ++i)
      res |= (str[i] - '0') << (size - i - 1);
   return res;
}
 
int main(void)
{
   cout << 1110011_b << endl;
   return 0;
}
http://liveworkspace.org/code/9363c2...cbc978b696035d
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 19:52     Разработать алгоритм перевода двоичных чисел в десятичные числа
Еще ссылки по теме:

C++ Алгоритм перевода шестнадцатеричного числа в десятичный код
C++ Перевод дробных двоичных в десятичные
C++ Реализовать алгоритм умножения двоичных чисел со сдвигом суммы частичного произведения вправо

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

Или воспользуйтесь поиском по форуму:
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
11.07.2012, 19:52     Разработать алгоритм перевода двоичных чисел в десятичные числа #9
Можно перевести используя метод Горнера
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
#include <iostream>
using namespace std;
 
int main()
{   
    int number = 1011011; // исходное двоичное число
    int st = 1;  
    int count = 0; // счётчик количества цифр 
    int dec = 0;   // десятичное
    int cop_number = number; // приравниваем число другой переменной чтобы узнать количество цифр
 
    while(cop_number) // считаем цифры
    { 
        cop_number /= 10; 
        count++; 
    }  
    for ( int i = 1; i < count; i++) 
        st = st * 10; // возводим в степень количества чисел
 
    while(number) // используем метод Горнера
    { 
        dec = dec * 2 + (number / st); // суммируем цифры слева направо, 
        //умножая ранее полученный результат 
        // на основу системы
        number = number % st; // следующая цифра
        st = st / 10;
    }
 
    cout << "Dec " <<  dec << endl;
}
Yandex
Объявления
11.07.2012, 19:52     Разработать алгоритм перевода двоичных чисел в десятичные числа
Ответ Создать тему
Опции темы

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