zoukankan      html  css  js  c++  java
  • 练习系列 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;
    }
  • 相关阅读:
    挺好的程序员面试网址
    [转]浅谈协方差矩阵
    坚持
    matlab中文论坛
    看书
    Opengl绘制点
    说服力
    心情
    vector操作
    我的毕设
  • 原文地址:https://www.cnblogs.com/codingmylife/p/2005453.html
Copyright © 2011-2022 走看看