История изменений
Исправление
sambist,
(текущая версия)
:
Сишечка не работает
#include <stdio.h>
#include <stdint.h>
#define BYTE(a7, a6, a5, a4, a3, a2, a1, a0) ((a7 << 7) | (a6 << 6) | (a5 << 5) | (a4 << 4) | (a3 << 3) | (a2 << 2) | (a1 << 1) | (a0))
#define BIT(a, num) ( ((a) & ( 0x1 << (num) )) != 0 )
int main(void)
{
typedef union
{
uint8_t u;
int8_t i;
} conv;
conv aR;
conv bR;
int8_t a = 8;
int8_t b = -21;
aR.i = a;
bR.i = b;
// -168
uint8_t p0 = BYTE(BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0)) & bR.u;
uint8_t p1 = BYTE(BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1)) & bR.u;
uint8_t p2 = BYTE(BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2)) & bR.u;
uint8_t p3 = BYTE(BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3)) & bR.u;
uint8_t p4 = BYTE(BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4)) & bR.u;
uint8_t p5 = BYTE(BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5)) & bR.u;
uint8_t p6 = BYTE(BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6)) & bR.u;
uint8_t p7 = BYTE(BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7)) & bR.u;
uint8_t r = BYTE(BIT(aR.u,7) ^ BIT(bR.u,7),
BIT(p6,0) | BIT(p5,1) | BIT(p4,2) | BIT(p3,4) | BIT(p2,4) | BIT(p1,5) | BIT(p0,6),
BIT(p5,0) | BIT(p4,1) | BIT(p3,2) | BIT(p2,3) | BIT(p1,4) | BIT(p0,5),
BIT(p4,0) | BIT(p3,1) | BIT(p2,2) | BIT(p1,3) | BIT(p0,4),
BIT(p3,0) | BIT(p2,1) | BIT(p1,2) | BIT(p0,3),
BIT(p2,0) | BIT(p1,1) | BIT(p0,2),
BIT(p1,0) | BIT(p0,1),
BIT(p0,0));
conv cR;
cR.u = r;
printf("%d\n", cR.i); // -127
}
Исходная версия
sambist,
:
Сишечка не работает
#include <stdio.h>
#include <stdint.h>
#define BYTE(a7, a6, a5, a4, a3, a2, a1, a0) ((a7 << 7) | (a6 << 6) | (a5 << 5) | (a4 << 4) | (a3 << 3) | (a2 << 2) | (a1 << 1) | (a0))
#define BIT(a, num) ( ((a) & ( 0x1 << (num) )) != 0 )
int main(void)
{
typedef union
{
uint8_t u;
int8_t i;
} conv;
conv aR;
conv bR;
int8_t a = 8;
int8_t b = -21;
aR.i = a;
bR.i = b;
// -168
uint8_t p0 = BYTE(BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0), BIT(aR.u, 0)) & bR.u;
uint8_t p1 = BYTE(BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1), BIT(aR.u, 1)) & bR.u;
uint8_t p2 = BYTE(BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2), BIT(aR.u, 2)) & bR.u;
uint8_t p3 = BYTE(BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3), BIT(aR.u, 3)) & bR.u;
uint8_t p4 = BYTE(BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4), BIT(aR.u, 4)) & bR.u;
uint8_t p5 = BYTE(BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5), BIT(aR.u, 5)) & bR.u;
uint8_t p6 = BYTE(BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6), BIT(aR.u, 6)) & bR.u;
uint8_t p7 = BYTE(BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7), BIT(aR.u, 7)) & bR.u;
uint8_t r = BYTE(BIT(aR.u,7) ^ BIT(bR.u,7),
BIT(p6,0) | BIT(p5,1) | BIT(p4,2) | BIT(p3,4) | BIT(p2,4) | BIT(p1,5) | BIT(p0,6),
BIT(p5,0) | BIT(p4,1) | BIT(p3,2) | BIT(p2,3) | BIT(p1,4) | BIT(p0,5),
BIT(p4,0) | BIT(p3,1) | BIT(p2,2) | BIT(p1,3) | BIT(p0,4),
BIT(p3,0) | BIT(p2,1) | BIT(p1,2) | BIT(p0,3),
BIT(p2,0) | BIT(p1,1) | BIT(p0,2),
BIT(p1,0) | BIT(p0,1),
BIT(p0,0));
conv cR;
cR.u = r;
printf("%d\n", cR.i);
}