/*!
\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;
}