Avni Salhotra Ответов: 2

Двоичные преобразования в языке Си


#include <xc.h>         // library of functions for this chip 
#include <stdio.h>      // library containing printf() function
#include "configureUSART.h" // library for configureUSART(baud)
#include "configuration_bits.h"


void printCharAsBinary(unsigned char number);
void WaitOneSecond(void);

int main(void)  
{
    unsigned i = 0;
    configureUSART(9600ul, 1); // configure MCU serial communication module to run at 9600 baud 
                               // defined in configureUSART.c

    WaitOneSecond();   // The splash screen lasts about one second
                       // LCD will not respond to printf() until it is finished.

    for(i=0; i < 256; i++)
      {
	printf("\n\r %u = ",i);
        printCharAsBinary((unsigned char)i);
      }                         

while(1)
   {
	  // MCUs run continuously so an endless loop is required.
   }
}	

void printCharAsBinary(unsigned char number)
{

if ( ((number & 0b10000000) >> 7 ) == 1)
   printf("0b1");
else
   printf("0b0");

if ( ((number & 0b01000000) >> 6 ) == 1)
   printf("1");
else
   printf("0");

if ( ((number & 0b00100000) >> 5 ) == 1)
   printf("1");
else
   printf("0");

if ( ((number & 0b00010000) >> 4 ) == 1)
   printf("1");
else
   printf("0"); 

if ( ((number & 0b00001000) >> 3 ) == 1)
   printf("1");
else
   printf("0");

if ( ((number & 0b00000100) >> 2 ) == 1)
   printf("1");
else
   printf("0");

if ( ((number & 0b00000010) >> 1 ) == 1)
   printf("1");
else
   printf("0");

if ( ((number & 0b00000001) ) == 1)
   printf("1");
else
   printf("0");
}

void WaitOneSecond(void)
{
int  i = 0;
for(i=0; i<=5; i++) 
   {
    _delay(50000ul);  // 50 000 * 4 / 1 000 000 = 1/5 s 
   }
}


Что я уже пробовал:

Я должен создать код для двоичного преобразования int, у меня есть следующий код для char. Я понимаю, что char-это 8 бит, а int-16 бит, и мне понадобится больше операций сдвига, чтобы проверить, " сколько существует степеней двух"

если бы у меня здесь было 7, то у меня было бы 14. не мог бы кто-нибудь объяснить мне, как устроены эти операторы сдвига. Я понимаю, что они проверяют мощность двух, но как они это делают, и если да, то как я могу применить это к более высоким битам. как настроить операторов смены?

Использование serLCD от sparkfun и PIC18F4525

2 Ответов

Рейтинг:
2

KarstenK

Вы должны понимать так называемый оператор сдвига битов (>>), который перемещает биты входного сигнала в нижнюю сторону. Таким образом, повторяющийся вызов перемещает все биты из памяти.

Этот оператор перемещается бит памяти, которая интерпретируется как некоторая переменная. Чтобы действительно понять это, вы должны понять, что все биты находятся в памяти, а фактическое значение-это толкование об этом воспоминании. Проще всего разобраться со строками. Некоторые объяснения с некоторыми примерами кода из Microsoft.

Я нашел действительно хорошую реализацию вашей задачи на переполнение стека Результаты прекрасно хранятся в строковых буферах.


Рейтинг:
0

Avni Salhotra

Я решил эту проблему спасибо всем вам за помощь