#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;
} |
|