查看数字在计算机内部的二进制表示

来源:互联网 发布:回转企鹅罐 知乎 编辑:程序博客网 时间:2024/04/30 05:12
#include<stdio.h>

int main(void){
        char c=97;
        short s=97;
        int n=97;
        float f=97;
        double d=97;

        int i,j;
        printf("char 97在计算机中的二进制表示:");
        for(i=sizeof(char)*8-1;i>=0;i--)
                printf("%d",(c>>i)&1);
        printf("\nshort 97在计算机中的二进制表示:");
        for(i=sizeof(short)*8-1;i>=0;i--)
                printf("%d",(s>>i)&1);
        printf("\nint 97在计算机中的二进制表示:");
        for(i=sizeof(int)*8-1;i>=0;i--)
                printf("%d",(n>>i)&1);
        printf("\nfloat 97在计算机中的二进制表示:");

        char* ip=&f;
        for(i=3;i>=0;i--){
                for(j=7;j>=0;j--)
                        printf("%d",(*(ip+i)>>j)&1);
        }
        printf("\ndouble 97在计算机中的二进制表示:");
        ip=&d;
        for(i=7;i>=0;i--){
                for(j=7;j>=0;j--)
                        printf("%d",(*(ip+i)>>j)&1);
        }
        printf("\n");
}

运行结果:

char 97在计算机中的二进制表示:01100001
short 97在计算机中的二进制表示:0000000001100001
int 97在计算机中的二进制表示:00000000000000000000000001100001
float 97在计算机中的二进制表示:01000010110000100000000000000000
double 97在计算机中的二进制表示:0100000001011000010000000000000000000000000000000000000000000000 


针对float f=97在计算机内部的二进制表示,以后进行人工转换。

将97转换成二进制为1100001(使用除2取余就能得到)

 1100001=1.100001*2^6=1.10001*2^110

float在计算机内是32位,其中首位为符号位,1-8是阶码段,9-31是尾数段。

符号位:正数为0,负数为1

 阶码段是这样得到的:如上97表示为 1100001=1.100001*2^110

那么阶码段就为110+01111111=10000101;

尾数段是这样得到的:1.100001在标准表示中,去掉第一位变成100001,后面的补0

所以97的在计算机内部的表示为:01000010110000100000000000000000
原创粉丝点击