Builder C++ Поразрядные операции
Добавлено: 19 ноя 2012, 17:35
помогите пожалуйста дописать 2 часть программы. 26. Даны два int-числа: N1 = ABCD и N2 = EFGH, где AB…GH – 16 – ричные цифры. Образовать long-число BCDABCDE, используя только поразрядные операции. В подчеркнутых цифрах поменять местами младший и старший биты.( подчеркнуты символы
первый- первая B,четвертый- A, и предпоследний -D в long-числе BCDABCDE)
посоветовали использовать код, который я приведу ниже, но с ним не могу разобраться, программа не работает.

Код: Выделить всё
#include <stdio.h>
#include <math.h>
#include <conio.h>
long num(int n1, int n2);
int main()
{
int n1, n2;
long n;
printf("\nRabota 8. Porazradnie operacii\n");
printf("Input two numbers n1 and n2: \t");
scanf("%x%x", &n1, &n2);
n = num(n1, n2);
printf("n = %lx\n", n);
getch();
return 0;
}
long num(int n1, int n2)
{
long n=0x0, BCD, A, E;
BCD = n1 & 0xFFF;
A = (n1 >>12) & 0xF;
E = (n2 >> 12) & 0xF;
n = n | (BCD << 4*5);
n = n | (A << 4*4);
n = n | (BCD << 4);
n = n | E ;
return (n);
}
Код: Выделить всё
long getnum( long n, int position)
{
return (n >> (4*position)) & 0xfu;
}
long setnum(long n,long num, int position)
{
long mask = ((long) 0xfu) << (4 * position);
n &= ~mask;
return n | ((num & 0xfu) << (4 * position));
}
long resetbits( long n )
{
int bit0 = (n & 0x1u) != 0;
int bit3 = (n & 0x8u) != 0;
if( bit0 != bit3 )
{
n &= 0x6u; /* 0110 */
if( bit0) n |= 0x8u; /* 1000 */
if( bit3) n |= 0x1u; /* 0001 */
}
}
long exhangebits( long n, int position)
{
long num = getnum( n, position);
num = resetbits( num );
return setnum( n, num, position);
}
{...
n = exchangebits( n, 7);
n = exchangebits( n, 4);
n = exchangebits( n, 1);
...
}