黑马程序员技术交流社区

标题: 10进制转换为2进制的原码反码补码 [打印本页]

作者: wx_MkPtTU4D    时间: 2016-3-3 23:53
标题: 10进制转换为2进制的原码反码补码
/**
*  十进制转化为2进制原码
*
*  @param num 用户输入的十进制
*/
void tenZhuanTwoYuanMa(int num)
{
    int num1[32];
    if (num>0)
    {
        num1[0] = 0;
    }
    else
    {
        num1[0] = 1;
        num*=(-1);
    }
    for (int i = 0; i <31; i++)
    {
        num1[31-i] = num%2;
        num/=2;
    }
    for (int i = 1; i<=32; i++)
    {
        printf("%d",num1[i-1]);
        if (i%8 == 0)
        {
            printf(" ");
        }
    }
   
}

/**
*  用户输入的十进制转化为二进制反码
*
*  @param num 用户输入的十进制
*/
void tenZhuanTwoFanMa(int num)
{
    int num1[32];
    if (num>=0)
    {
        num1[0] = 0;
        for (int i = 0; i <31; i++)
        {
            num1[31-i] = num%2;
            num/=2;
            
        }
    }
    else
    {
        num1[0] = 1;
        num*=(-1);
        for (int i = 0; i <31; i++)
        {
            num1[31-i] = num%2;
            if(num1[31- i]==0)
            {
                num1[31-i] = 1;
            }
            else
            {
                num1[31 - i] = 0;
            }
            num/=2;
            
        }
    }
   
    for (int i = 1; i<=32; i++)
    {
        printf("%d",num1[i-1]);
        if (i%8 == 0)
        {
            printf(" ");
        }
    }
   
}

/**
*  10进制转化为2进制的补码
*
*  @param num 用户输入的值
*/
void tenZhuanTwoBuMa(int num)
{
    int num1[32];
    if (num>=0)
    {
        num1[0] = 0;
        for (int i = 0; i <31; i++)
        {
            num1[31-i] = num%2;
            num/=2;
            
        }
    }
    else
    {
        num1[0] = 1;
        num*=(-1);
        for (int i = 0; i <31; i++)
        {
            num1[31-i] = num%2;
            if(num1[31- i]==0)
            {
                num1[31-i] = 1;
            }
            else
            {
                num1[31 - i] = 0;
            }
            num/=2;
            
        }
        for (int k = 0; k < 31; k++)
        {
            if (*(num1+31-k)== 0)
            {
                *(num1+31-k)= 1;
                for (int j = 0; j < k; j++)
                {
                    *(num1+31-j) = 0;
                }
                break;
            }
        }
    }
   
    for (int i = 1; i<=32; i++)
    {
        printf("%d",num1[i-1]);
        if (i%8 == 0)
        {
            printf(" ");
        }
    }
   
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2