hex 값으로 역수를 구하는 프로그램을 만들었습니다.

shint의 이미지

//
아침에 이런게 생각나서 만들어봤습니다.
제가 머리가 좋은건지. 아니면. 누가 암시로 알려주는건지... ㅡ_ㅡ;;; 누구나 다 아는건지 모르겠지만.

이렇게 되면 압축이나 암호화와 복호화가 쉽게 가능하게 되는데요.
이런걸 무슨 방식이라고 하나요?

생각해보니. 제가 착각했네요. a b c 값을 모르는데 말이죠. ㅡ_ㅡ;;; 어쩐지...

#include "stdafx.h"
 
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
 
 
typedef struct _CHAR
{
	unsigned int n1:1;
	unsigned int n2:1;
	unsigned int n3:1;
	unsigned int n4:1;
	unsigned int n5:1;
	unsigned int n6:1;
	unsigned int n7:1;
	unsigned int n8:1;
}SC;	//struct char
 
 
//fn_hex_binary
unsigned char fn_h2b(unsigned char n)
{
	SC sc;
	sc.n1  = n>>0  & 0x01;
	sc.n2  = n>>1  & 0x01;
	sc.n3  = n>>2  & 0x01;
	sc.n4  = n>>3  & 0x01;
	sc.n5  = n>>4  & 0x01;
	sc.n6  = n>>5  & 0x01;
	sc.n7  = n>>6  & 0x01;
	sc.n8  = n>>7  & 0x01;
 
	printf("%d%d%d%d%d%d%d%d", n>>7 & 0x01, n>>6 & 0x01, n>>5 & 0x01, n>>4 & 0x01, n>>3 & 0x01, n>>2 & 0x01, n>>1 & 0x01, n>>0 & 0x01);
	printf("\t");
	printf("%x\n", sc);
 
	unsigned char r;
	memcpy(&r, &sc, 1);
	return r;
}
 
 
int main(int argc, char* argv[])
{
	unsigned char a = 0xA2;
	unsigned char b = 0x43;
 
	printf("fn_h2b(a	)\t");		fn_h2b(a	);
	printf("fn_h2b(b	)\t");		fn_h2b(b	);
 
	printf("fn_h2b((a|b)&a	)\t");		fn_h2b((a|b)&a	);
	printf("fn_h2b((a&b)|a	)\t");		fn_h2b((a&b)|a	);
	printf("fn_h2b((a^b)^a	)\t");		fn_h2b((a^b)^a	);
 
	printf("fn_h2b((a|b)&b	)\t");		fn_h2b((a|b)&b	);
	printf("fn_h2b((a&b)|b	)\t");		fn_h2b((a&b)|b	);
	printf("fn_h2b((a^b)^b	)\t");		fn_h2b((a^b)^b	);
 
	//역수 구하기
	{
	unsigned char a = 0xA0;
	unsigned char b = 0xB1;
	unsigned char c = 0xC2;
	unsigned char d = 0xD3;
	unsigned char e = 0xE4;
	unsigned char t;
 
	t = a;		fn_h2b(t	);
	t = t^b;	fn_h2b(t	);
	t = t^c;	fn_h2b(t	);
	t = t^d;	fn_h2b(t	);
 
	t = t^d;	fn_h2b(t	);
	t = t^c;	fn_h2b(t	);
	t = t^b;	fn_h2b(t	);
 
	printf("\n");
	}
 
	//역수 구하기
	{
	unsigned char a = 0xBD;
	unsigned char b = 0xB2;
	unsigned char c = 0xCB;
	unsigned char d = 0xBE;
	unsigned char e = 0x9C;
	unsigned char t;
 
	t = a;		fn_h2b(t	);
	t += a^1;	fn_h2b(t	);
	t += b^2;	fn_h2b(t	);
	t += c^3;	fn_h2b(t	);
 
	t -= c^3;	fn_h2b(t	);
	t -= b^2;	fn_h2b(t	);
	t -= a^1;	fn_h2b(t	);
 
	printf("\n");
	}
 
	//역수 구하기
	{
	unsigned char a[8] = {0xBD, 0xB2, 0xCB, 0xBE, 0x9C, 0xAC, 0xA4, 0x88};
	unsigned char t=0;
 
	int i=0;
	for(i=0; i<8; i++)
	{
		printf("%d\t",i);	t += a[i]^i;		fn_h2b(t	);
	}
	printf("\n");
 
	//
	printf("%d\t",i-1);		fn_h2b(t	);		//현재값 출력
	for(i=8-1; i>0; --i)
	{
		printf("%d\t",i-1);	t -= a[i]^i;		fn_h2b(t	);
	}
 
	printf("\n");
	}
 
	return 0;
}
 
//출력
fn_h2b(a        )       10100010        cccccca2
fn_h2b(b        )       01000011        cccccc43
fn_h2b((a|b)&a  )       10100010        cccccca2
fn_h2b((a&b)|a  )       10100010        cccccca2
fn_h2b((a^b)^a  )       01000011        cccccc43
fn_h2b((a|b)&b  )       01000011        cccccc43
fn_h2b((a&b)|b  )       01000011        cccccc43
fn_h2b((a^b)^b  )       10100010        cccccca2
 
10100000        cccccca0
00010001        cccccc11
11010011        ccccccd3
00000000        cccccc00
11010011        ccccccd3
00010001        cccccc11
10100000        cccccca0
 
10111101        ccccccbd
01111001        cccccc79
00101001        cccccc29
11110001        ccccccf1
00101001        cccccc29
01111001        cccccc79
10111101        ccccccbd
 
0       10111101        ccccccbd
1       01110000        cccccc70
2       00111001        cccccc39
3       11110110        ccccccf6
4       10001110        cccccc8e
5       00110111        cccccc37
6       11011001        ccccccd9
7       01101000        cccccc68
 
7       01101000        cccccc68
6       11011001        ccccccd9
5       00110111        cccccc37
4       10001110        cccccc8e
3       11110110        ccccccf6
2       00111001        cccccc39
1       01110000        cccccc70
0       10111101        ccccccbd