Вернуть другое число, в котором переставлены местами биты в четверках - 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;
}