分享

揭秘float类型的存储方式

 联通手机用户 2017-12-05

#include


void getIntBinary(int n, char bin[32])

{

int i;

int positive; //判断是正数还是负数的

int index = 0; //数组索引(下标)

char ch[31] = {0};//临时数组,存储中间二进制码

if(n >= 0)

{

//是正数 

positive = 1;

bin[index++] = '0';

}

else

{

//是负数

positive = 0;

bin[index++] = '1';

n = -n;//把负数n转换成正数

}

//采用除2取余法,获取二进制字符,放在临时数组当中

for(i = 0; n && i < 31;  ++i)

{

ch[i] = n % 2 + '0';

n >>= 1;//右移一位,相当于除以2

}

//采用逆序的方式,将临时数组中的二进制字符填入bin数组中

for(i = 30; i >= 0; --i)

bin[index ++] = ch[i] ? ch[i] : '0';

//如果是负数的话,还需要进行下面的操作

if(!positive)

{

//转换成反码(符号位不变,其它位取反)

for(i = 1; i < 32; ++i)

bin[i] = (bin[i] == '1' ? '0' : '1');

//转换成补码(将反码加1)

i = 31;//从末尾开始加

while(i)

{

if(bin[i] == '0')

{

bin[i] = '1';

break;

}

else

{

bin[i] = '0';

--i;//向前进一位

}

}

}

}


int main()

{

int i = -85;

char buf[32];

getIntBinary(i, buf);

for(i = 0; i < 32; ++i)

printf('%c', buf[i]);

printf('\n');

return 0;

}


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多