Вернуть другое число, в котором переставлены местами биты в четверках - C (СИ)
Формулировка задачи:
Нужно написать функцию которая по заданному типу Integer возвращает другое число в котором переставлены местами биты в четверках.
Пример работы:
Enter number : 163
You entered: 163 = 0xA3 = 10100011
Result: 92 = 0x5c = 01011100
#include <stdio.h> #include <string.h> typedef unsigned char Integer; //typedef unsigned short Integer; //typedef unsigned int Integer; //typedef unsigned long Integer; Integer Bin(const Integer number) // перевод в двоичную { int i,j,len; const Integer *num; len = sizeof(Integer)-1; num = &number; for (i = len; i >= 0; i--) for (j = 7; j >= 0; j--) printf("%i", (num[i] >> j) & 1); } Integer reverseBit(const Integer number) //реверс битов { int i, j, len; const Integer *num; len = sizeof(Integer)-1; num = &number; for (i = len; i >= 0; i--) for (j = 7; j >= 0; j--) printf("%i", ~(num[i] >> j) & 1); } Integer reverse(const Integer number) //реверс и представление в десятичной { int i, j, len; const Integer *num; len = sizeof(Integer)-1; num = &number; for (i = len; i >= 0; i--) for (j = 7; j >= 0; j--) printf("%i", ~(num[i] >> j) ); } int main(void) { Integer count; while (printf("Enter count: ") && scanf("%i", &count) == 1){ printf("You entered : %i = 0x%0x = ", count,count ); Bin(count); printf(" \n"); printf("Result : "); reverse(count); printf(" \n"); } return 0; }
printf("%i", (num[i] >> j) & 1) //пытался добавить сюда &255, но выдает ошибку;
Решение задачи: «Вернуть другое число, в котором переставлены местами биты в четверках»
textual
Листинг программы
#include <stdio.h> unsigned char reverce4 (unsigned char n) { unsigned char halfs[]={ 0,8,4,12, 2,10,6,14, 1,9,5,13, 3,11,7,15 }; return (halfs[(n&0xF0)>>4]<<4)|halfs[n&0x0F]; } int main () { int n=163,n2=reverce4 (n); printf ("\n%d (%X) -> %d (%X)",n,n,n2,n2); getchar(); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д