转载请注明原文出处,http://www.cnblogs.com/flyingcloude/p/6992526.html
#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