Перевод из 10-ной системы счисления в 2-ичную - C (СИ)
Формулировка задачи:
Сравнение указанных последовательностей битов в двух разных заданных числах. Тоесть берем 2 числа в 10ой системе и переводим ее в 2ую, потом в этих двоичных нужно взять с i до j элемента и сравнить
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
void DecToBin (int n)
{ int i=0;
if (n>=2)
{
DecToBin( n/2 );
}
printf("%d",n % 2);
}
int main ()
{
int n,m;
printf("n = ");
scanf("%d",&n);
printf("\nm = ");
scanf("%d",&m);
//-----------fist------------------------------
printf(" (Dec) = ");
DecToBin( n);
printf("(Bin)/n");
//-------second--------------------------------
printf(" \n(Dec) = ");
DecToBin( m);
printf("(Bin)/m");
return 0;
}Решение задачи: «Перевод из 10-ной системы счисления в 2-ичную»
textual
Листинг программы
#include <stdio.h>
//нумерация битов с право налево, а индексация с нуля
int is_bincmp(unsigned int a, unsigned int b, int i, int j){
const unsigned int h = (sizeof(a) << 3) - j;
a = ((a << h) >> h) >> i;
b = ((b << h) >> h) >> i;
return (a == b);
}
int main(void){
unsigned int a = 0xABCDEF;
unsigned int b = 0x12CDE6;
if(is_bincmp(a, b, 4, 16))
puts("yes");
else
puts("not!");
return 0;
}
Объяснение кода листинга программы
- Включаем стандартную библиотеку файлов
- Функция is_bincmp принимает 4 аргумента: a - первое число для сравнения b - второе число для сравнения i - номер бита, с которого начинается сравнение (считая справа налево) j - номер бита, на который заканчивается сравнение (считая справа налево)
- Определяем значение h - это количество бит, которые мы хотим перенести налево (начиная с 0-го бита)
- Сдвигаем a и b налево на значение h, затем сдвигаем обратно на значение h, чтобы получить нужный нам бит
- Вычисляем a и b с учетом индексации с нуля
- Возвращаем результат сравнения a и b
- В функции main() задаем значения a и b
- Используем функцию is_bincmp() для сравнения a и b на битах 4 и 16 (это неявное сравнение двух строк)
- Выводим соответствующее сообщение в зависимости от результата сравнения
- Возвращаем 0, чтобы указать, что программа успешно завершилась