지식인에서 종종 코딩문제를 풀어주곤 하는데 비트를 만지다보니 생각보다 재밌어서 간단한 비트출력 라이브러리를 작성해보았다.
실수형과 포인터는 비트연산자가 먹히질 않아 공용체를 이용해 마개조한 뒤에 연산을 하도록 했다.
| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | #pragma once#pragma warning(disable:4244) #include union float_bit { float base; int result;}; union double_bit { double base; long long result;}; union pointer_bit { void* base; int result;}; void bitout(char);void bitout(unsigned char);void bitout(short);void bitout(unsigned short);void bitout(int);void bitout(unsigned int);void bitout(long long);void bitout(unsigned long long); void bitout(float);void bitout(double); void bitout(void*); //bit outputvoid bitout(char num){ for (int n = 7; n >= 0; n--) printf("%d", (num >> n) & 1);} void bitout(unsigned char num){ for (int n = 7; n >= 0; n--) printf("%d", (num >> n) & 1);} void bitout(short num){ for (int n = 15; n >= 0; n--) { if ((0 == (n + 1) % 8)&&n!=15) putchar(' '); printf("%d", (num >> n) & 1); }} void bitout(unsigned short num){ for (int n = 15; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 15) putchar(' '); printf("%d", (num >> n) & 1); }} void bitout(int num){ for (int n = 31; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 31) putchar(' '); printf("%d", (num >> n) & 1); }} void bitout(unsigned int num){ for (int n = 31; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 31) putchar(' '); printf("%d", (num >> n) & 1); }} void bitout(long long num){ for (int n = 63; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 63) putchar(' '); printf("%d", (int)((num >> n) & 1LL)); }} void bitout(unsigned long long num){ for (int n = 63; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 63) putchar(' '); printf("%d", (int)((num >> n) & 1ULL)); }} //real numbervoid bitout(float num){ union float_bit FLOAT; FLOAT.base=num; for (int n = 31; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 31) putchar(' '); printf("%d", (FLOAT.result >> n) & 1); }} void bitout(double num){ union double_bit DOUBLE; DOUBLE.base = num; for (int n = 63; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 63) putchar(' '); printf("%d", (int)((DOUBLE.result >> n) & 1LL)); }} void bitout(void* num){ union pointer_bit POINTER; POINTER.base = num; for (int n = 31; n >= 0; n--) { if ((0 == (n + 1) % 8) && n != 31) putchar(' '); printf("%d", (POINTER.result >> n) & 1); }}Colored by Color Scripter | cs |