Перевести число из 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;
}
Объяснение кода листинга программы
- Переводим число из 10 в 16 систему исчисления
- Объединяем все числа из 16 системы исчисления в одно число
- Сдвигаем все биты числа на определенное количество позиций вправо или влево
- Меняем местами все части числа по 4 бита
- Сдвигаем вправо по 4 бита, пока не сдвинем все нули, что раньше были старшими
- Возвращаем полученное число
- Выводим исходное число
- Выводим полученное число в 16 системе исчисления
- Выводим полученное число в десятичной системе исчисления