Перевести число из 10 в 16 систему исчисления - C (СИ)

Узнай цену своей работы

Формулировка задачи:

1. Написать и протестировать функцию unsigned int F(unsigned int m); которая целое положительное число m записывает в шестнадцатеричной системе счисления, разряды в этой записи переставляет в обратном порядке, получившееся шестнадцатеричное число переводит в десятичную систему счисления, и возвращает полученное значение. Например, при m = 513 F(m) возвратит значение 258. есть исходник перевода из 10 в 16 и записывает его наоборот. нужно число записанное в обратном порядке записать в 10 системе исчисления. и если можно с коментариями
#include <stdio.h>
#include <string.h>
 
char * strreverse(char * s){
    char *h,*t,ch;
    for (h=s,t=s+strlen(s)-1;h<t;++h,--t)
    {
        ch=*h;
        *h=*t;
        *t=ch;
    }
    return s;
}
 
unsigned int hexreverse(unsigned n){
    static char buf[16];
    sprintf(buf,"%x",n);
    sscanf(strreverse(buf),"%x",&n);
 
    return n;
}
 
int main(void)
{
    unsigned n;
    while ( printf("Number: ") && scanf("%u", &n) == 1 ){
        printf("Before: %x\n", n);
        printf("After:  %x\n", hexreverse(n));
    }
    return 0;
}

Решение задачи: «Перевести число из 10 в 16 систему исчисления»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
 
unsigned int F(unsigned int m)
{
    m=(m<<28)|
      (m<<20&0x0F000000)|
      (m<<12&0x00F00000)|
      (m<<4&0x000F0000)|
      (m>>4&0x0000F000)|
      (m>>12&0x00000F00)|
      (m>>20&0x000000F0)|
      (m>>28);//меняем местами все части по 4 бита
    while((m&0x0F)==0)//сдвигаем вправо по 4 бита, пока не сдвинем все нули, что раньше были старшими
        m=m>>4;
    return m;
}
 
int main(void)
{
    unsigned int n;
    while ( printf("Number: ") && scanf("%u", &n) == 1 )
    {
        printf("Before: %x\n", n);
        printf("After:  %x\n", F(n));
        printf("After(dec):  %u\n", F(n));
    }
    return 0;
}

Объяснение кода листинга программы

  1. Переводим число из 10 в 16 систему исчисления
  2. Объединяем все числа из 16 системы исчисления в одно число
  3. Сдвигаем все биты числа на определенное количество позиций вправо или влево
  4. Меняем местами все части числа по 4 бита
  5. Сдвигаем вправо по 4 бита, пока не сдвинем все нули, что раньше были старшими
  6. Возвращаем полученное число
  7. Выводим исходное число
  8. Выводим полученное число в 16 системе исчисления
  9. Выводим полученное число в десятичной системе исчисления

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.4 из 5
Похожие ответы