练习系列 7、打印数据的二进制表示

/*!
\author Liubao
\date 2011/4/4
\brief 打印数据的二进制形式
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
 
/*!
打印字符的二进制表示,结尾不含换行符
\param ch 需要打印的字符
\warning 注意此处是宏实现,不可使用自增/自减运算符作参数!
*/
#define _PRINT_CHAR(ch)                             \
    do                                              \
    {                                               \
        unsigned char mask = CHAR_MIN;              \
                                                    \
        do                                          \
            putchar((ch) & mask ? '1' : '0');       \
        while(mask >>= 1);                          \
    }while(0)
 
/*!
打印任意基本数据类型var的二进制表示,结尾不含换行符
\param var 需要打印的变量
\warning 由于针对小端类型特殊处理,打印非基本数据类型会导致结果错误!
*/
#define PRINT_BINARY(var)                           \
    do                                              \
    {                                               \
        const char *begin = (const char *)&(var);   \
        const char *end = begin + sizeof(var);      \
                                                    \
        while(begin <= --end) _PRINT_CHAR(*end);    \
    }while(0)
 
/*!
打印任意基本任据类型var的二进制表示,结尾包含换行符
\param var 需要打印的变量
\warning 由于针对小端类型特殊处理,打印非基本数据类型会导致结果错误!
*/
#define PUTS_BINARY(var) PRINT_BINARY(var); putchar('\n')
 
int main()
{
    double d = 5.66f;
    char ch = 'A';
    int i = -1;
    float f = 0.15625f;
    long long l = 1;
 
    PUTS_BINARY(d);
    PUTS_BINARY(ch);
    PUTS_BINARY(i);
    PUTS_BINARY(f);
    PRINT_BINARY(l);
 
    return 0;
}
原文地址:https://www.cnblogs.com/codingmylife/p/2005453.html