标题:十进制转换2进制问题
只看楼主
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
 问题点数:0 回复次数:7 
十进制转换2进制问题
程序代码:
#include<stdio.h>
#include<string.h>
void ten_to_two(int n,char *b)
{
    
    int count = 0;
    char buf[128]={0};
    while(1)
    {
        buf[count] = n%2;
    //    n=n%2;
        n=n/2;    
        
            if(n==0) break;
            count++;
    }
    printf("count=%d\n",count);
    for(int i = count;i >=0;i--)
    {
        b[i]=buf[count-i];
    }

    
}

int main()
{
    int n = 15;
    char buf[128]={0};
    ten_to_two(n,buf);
    puts(buf);
    int i = strlen(buf);
    printf("i=%d\n",i);
    return 0;
}



找个明白人 为什么我主函数里面的buf是乱码呢
搜索更多相关主题的帖子: 十进制 转换 int char count 
2018-08-21 14:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
因为 buf 中是 1, 1, 1, 1, 0
不是 '1', '1', '1', '1', 0
2018-08-21 14:31
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
得分:0 
回复 2楼 rjsp
程序代码:
#include<stdio.h>
#include<string.h>
void ten_to_two(int n,char *b)
{
    
    int count = 0;
    char buf[128]={0};
    while(1)
    {
        buf[count] = n%2-'0';
        n=n/2;    
        
            if(n==0) break;
            count++;
    }
    printf("count=%d\n",count);
    for(int i = count;i >=0;i--)
    {
        b[i]=buf[count-i];
    }

    
}

int main()
{
    int n = 15;
    char buf[128]={0};
    ten_to_two(n,buf);
    puts(buf);
    int i = strlen(buf);
    printf("i=%d\n",i);
    return 0;
}





这样还是乱码 5555555555
2018-08-21 14:34
尘安
Rank: 2
等 级:论坛游民
威 望:1
帖 子:19
专家分:55
注 册:2018-8-9
得分:0 
应该是buf[count] = n%2+48;    //或者buf[count] = n%2+'0';
2018-08-21 14:41
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
得分:0 
回复 4楼 尘安
你看看我第二个代码 在3楼~~
2018-08-21 14:48
a15022606145
Rank: 1
等 级:新手上路
帖 子:75
专家分:0
注 册:2015-7-11
得分:0 
回复 4楼 尘安
为什么 + ‘0’ 正确  而-‘0’ 不正确呢?
2018-08-21 14:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 3楼 a15022606145
buf[count] = n%2-'0'; 改为 buf[count] = n%2+'0';

这道题还是有些考究的,我勉强试试
程序代码:
#include <stdio.h>

const char* to_binary_string( int n )
// ten_to_two 命名是错误的,数本身是没有进制的,只有数的表现形式才有进制之说
// 简而言之,n不是十进制,也不是其它人说的二进制,虽然它在计算机内部的以二进制形式存储
{
    if( n == 0 ) // 这种特殊情况不能落下
        return "0";

    unsigned m = n;
    if( n < 0 ) // 既然参数类型是 int,那就得考虑到负数;如果不考虑负数,那参数类型就应该用 unsigned
        m = -m; // 如果用int存-n会有溢出之虞,故m类型是 unsigned int

    _Thread_local static char buf[21] = { [20]='\0' };
    // 目前各数据模型中,int最大为64bits(ILP64),因此最长是"-9223372036854775808",共21个字符
    // 不加 static 的话,其生存期到函数调用结束为止
    // 不加 _Thread_local 的话,多线程调用时使用
    // 字符串以'\0'结尾,故而初始化 [20]='\0'

    char* p = buf + sizeof(buf) - 1;
    for( ; m; m/=2 )
        *--p = (m%2)+'0';
    if( n < 0 )
        *--p = '-';
    return p;
}

int main( void )
{
    puts( to_binary_string(15) );
    puts( to_binary_string(-15) );

    puts( to_binary_string(-2147483648) );
    puts( to_binary_string(-123456789) );
    puts( to_binary_string(0) );
    puts( to_binary_string(+123456789) );
    puts( to_binary_string(+2147483647) );
}


2018-08-21 15:16
zhangchm2018
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:32
专家分:129
注 册:2018-8-18
得分:0 
回复 6楼 a15022606145
因为'1'、'2'...在ASCII表中排在'0'后面
2018-08-21 23:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489343-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.393848 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved