加入收藏 在线留言 联系我们
关注微信
手机扫一扫 立刻联系商家
全国服务热线15915421161

SIEMENS江苏省扬州市 西门子代理商——西门子华东一级总代理

更新时间
2024-07-02 07:00:00
价格
请来电询价
西门子总代理
PLC
西门子一级代
驱动
西门子代理商
伺服电机
联系电话
15903418770
联系手机
15915421161
联系人
张经理
立即询价

详细介绍

 C代码实现

分析了这么多,可以编写代码来输出一个数字的2进制格式形式了。具体的代码实现:




















  • void printf_bin(int num){    int i, j, k;    unsigned char *p = (unsigned char*)&num + 3;//p先指向num后面第3个字节的地址,即num的Zui高位字节地址     for (i = 0; i < 4; i++) //依次处理4个字节(32位)    {        j = *(p - i); //取每个字节的首地址,从高位字节到低位字节,即p p-1 p-2 p-3地址处        for (int k = 7; k >= 0; k--) //处理每个字节的8个位,注意字节内部的二进制数是按照人的习惯存储!        {            if (j & (1 << k))//1左移k位,与单前的字节内容j进行或运算,如k=7时,00000000&10000000=0 ->该字节的Zui高位为0                printf("1");            else                printf("0");        }        printf(" ");//每8位加个空格,方便查看    }    printf("\r\n");}

    数字258的实际运行效果:

    00000000 00000000 00000001 00000010

    对应unsigned char型的数字,如果只需要显示8位2进制数,可以对上述小程序简化:















  • void printf_bin_8(unsigned char num){    int k;    unsigned char *p = (unsigned char*)&num;     for (int k = 7; k >= 0; k--) //处理8个位    {        if (*p & (1 << k))            printf("1");        else            printf("0");    }    printf("\r\n");}

    数字12的运行结果:

    00001100








                                                             关于负数

    上面测试的都是正数,当然,对于负数,也是可以显示的,因为负数在计算机中是以对应正数的补码来存储的,因而显示的2进制数也是补码形式,这里顺便再复习一下补码:

    对于负数-9,对应的正数位9,9的原码,反码,补码如下:

    这里只画出8位示意,int型数字实际是占32位,对应的高位全是0或1。

    使用程序测试一下-9的2进制格式输出:

    11111111 11111111 11111111 11110111

    可以正确显示。



    相关产品

    联系方式

    • 电  话:15903418770
    • 联系人:张经理
    • 手  机:15915421161
    • 微  信:15915421161