Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Санек25
420 / 350 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
1

Как максимально просто перевести байт из двоично-десятичной в десятичную систему счисления

08.01.2016, 00:46. Просмотров 510. Ответов 4
Метки нет (Все метки)

Всем привет в си я не силен , пот столкнулся с проблемой. Приходит мне байт в двоично десятичной системе. Как максимально просто перевести в десятичную систему?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2016, 00:46
Ответы с готовыми решениями:

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

Перевести число в десятичную систему счисления
Дана последовательность из пяти символов, представляющая число в шестнадцатеричной системе...

Перевод из двоично-десятичной СС в десятичную
Надо реализовать собственой функцией, при недопустимой комбинации функция должна вернуть -1...

Как перевести число из десятичной системы счисления в двоичную?
Есть ли какие-нибудь базовые функции, либо всё делать вручную? Если вручную, то приведите,...

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

4
Байт
Эксперт C
20048 / 12669 / 2663
Регистрация: 24.12.2010
Сообщений: 26,385
08.01.2016, 11:26 2
Цитата Сообщение от Санек25 Посмотреть сообщение
в двоично десятичной системе.
Подзабыл уже, что за система такая. Это когда на каждую десятичную цифру отводится 4 бита, да? Типа 95(10) = 10010101(2-10)
Помню что-то в этом роде использовалось в ЕС (IBM-360) и языке ПЛ-1.
Если я не ошибаюсь
C
1
2
int n; unsigned char c;
n = 10*(c>>4) + (c&15);
1
kolobok0
46 / 46 / 9
Регистрация: 24.01.2010
Сообщений: 225
08.01.2016, 18:53 3
никак.
т.к. процессоров оперирующих с десятичными регистрами нет(ну или почти нет - разработки были давно в ссср).
перевод в бинарный вид - уже прозвучало выше.
если вам вывести как десятичное число - то команда принт и маскирование верхнего либо нижнего нимба спасёт отца русской демократии. типа того:
print("%d%d", c>>4, c&15);

(круглый)
1
Санек25
420 / 350 / 19
Регистрация: 14.05.2012
Сообщений: 1,437
08.01.2016, 20:13  [ТС] 4
Суть в том что пишу прогу под микроконтройлер. В си я слабо шарю до этого писал чуток на делфи... Мне приходит сигнал с RTC например такой 00110100, что равняется 34 секундам. Все что нашел для меня сложновато либо вообще на асемблере. Я хочу разделить на 2 полубайта и через swith путем сравнения найти нужное число . благо их только 10...

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
    int b1=TWDR;   //получил байт
       int b2=TWDR;
           dva[0]=(b1>>4)<<4;
           dva[1]=(b2<<8)>>4;
           dva[2]=0b11111101;
           dva[3]=0b11111110; 
                    
        _delay_ms(10) ;
               
        for (int ii=0;ii<=1;ii++)
        {
        switch(dva[ii]){
        case 0b00000000 :PORTD=0b0111111; break;//0
        case 0b00010000 :PORTD=0b0000110; break;//1
        case 0b00100000 :PORTD=0b1011011; break;//2
        case 0b00110000 :PORTD=0b1001111; break;//3
        case 0b01000000 :PORTD=0b1100110; break;//4
        case 0b01010000 :PORTD=0b1101101; break;//5
        case 0b01100000 :PORTD=0b1111101; break;//6
        case 0b01110000 :PORTD=0b0000111; break;//7
        case 0b10000000 :PORTD=0b1111111; break;//8
        case 0b10010000 :PORTD=0b1101111; break;//9     
         break;  
           }
       PORTC=dva[ii+2];  
      _delay_ms(10) ;
      PORTC=0b11111111;
     }
не знаю что я сделал но все заработало. Спасибо за ответы.
0
kolobok0
46 / 46 / 9
Регистрация: 24.01.2010
Сообщений: 225
08.01.2016, 20:47 5
эээээ
вы получаете два раза одно и то-же значение.

одно вы сдвигаете вправо на 4 бита и потом влево тем самым обнуляете младший нимб(вообще-то это завязывание на особенности реализации сдвига. если компилятор не дай бог заюзает сдвиг через перенос - то ваша логика поедет). далее вы сохраняете это в массиве по смещению 0.

второе вы сдвигаете влево на 8 и в право на 4. тем самым вы обнуляете старший нимб, завязавшись на размерность инта(в два байта). что так-же накроется медным тазом при переносе на другую среду выполнения данного кода.
сохраняете в массиве по смещению 1.

кстати если вы включите оптимизацию при компиляции - то возможно эти хитрые сдвиги будут оптимизированы (т.е. работать начнут по другому).

по смещению 2 и 3 вы кладёте значения которые не будете использовать - хз зачем. И при использовании констант в коде - лучше их вынести в шапочку программы, а не разбрасывать по коду магические цифры-комбинации.

делаете задержку (тут зависит от тактовой МК, от быстродействия периферии МК и от быстродействия периферии подключённой к МК) - которая имхо не нужна.

в кейсах вы анализируете старший нимб. что является плохо читаемым и собственно надо иметь веские основания почему вы так сделали. я так понимаю - потому, что случайно формируете верхний нимб через сдвиги(хотя можно любой и попроще - через маски).
Опять-же магические комбинации нулей. как в самих кейсах, так и то, что отправляете в порт.
после цикла вы посылаете в порт Цэ всякий мусор.

Совет дня:
Если весь код переписать через массив ваших констант - то код будет составлять строчки 3 всего. И иметь меньшее кол-во шагов исполнения.

удачи вам
(круглый)
1
08.01.2016, 20:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2016, 20:47

Перевод десятичного числа в двоично-десятичную систему счисления
Разработать программу и подпрограмму (подпрограммы), выполняющие действия согласно варианту задания...

Перевод из двоично-десятичной в двоичную систему счисления
Нужна помощь: создать подпрограмму для перевода числа из двоично-десятичной системы в двоичную...

Как перевести число с E в десятичную систему счисления?
Программа выдала число 6.92061e+009 как его перевести в десятичную систему счисления ?


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

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

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