변수값을 비트 형태로 출력하기 (C++)

지식인에서 종종 코딩문제를 풀어주곤 하는데 비트를 만지다보니 생각보다 재밌어서 간단한 비트출력 라이브러리를 작성해보았다.

실수형과 포인터는 비트연산자가 먹히질 않아 공용체를 이용해 마개조한 뒤에 연산을 하도록 했다.




| 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 |