广东湘恒智能科技有限公司
主营产品: 西门子PLC代理商,plc变频器,伺服电机,人机界面,触摸屏,线缆,DP接头
SIEMENS江苏省扬州市 西门子代理商——西门子华东一级总代理

 C代码实现

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




















void printf_bin(int num){    int i, j, k;    unsigned char *p = (unsigned char*)&num + 3;//p先指向num后面第3个字节的地址,即num的最高位字节地址     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 ->该字节的最高位为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

可以正确显示。



展开全文
相关产品
拨打电话 微信咨询 发送询价