进制转换和按位运算

#include <cstdio>
#include <cstdlib>
#include <cstring>
 
int btod(char *bstr);     
int dtob(int d, char *bstr);    
 
int main(int argc, char **argv)
{
    char bstr[64] ="";
    memset(bstr,0,sizeof(bstr));
    int d = 0;
 
   // printf("输入二进制数: ");
    //scanf("%s", bstr);
    //if ((d = btod(bstr)) < 0)
    //    printf("error!\n");
    //else
    //    printf("二进制 %s 转十进制为 %d\n", bstr, d);
 
    d = 0;  
    //bzero(bstr, sizeof(bstr));
  memset(bstr,0,sizeof(bstr));
    printf("十进制数: ");
    scanf("%d", &d);
    int j = d;
    if ((dtob(d, bstr)) < 0)
        printf("ÊäÈëÓÐÎó\n");
    else
        printf("十进制 %d 转二进制为 %s\n", d, bstr);
  //x >> (k-1) & 1 
  printf("%d\n",(j >>0&1));
  printf("%d\n",(j >>1&1));
  printf("%d\n",(j >>2&1));
  printf("%d\n",(j >>3&1));
  printf("%d\n",(j >>4&1));
 
    return 0;
}
 

int btod(char *bstr)
{
    int d = 0;
    unsigned int len = strlen(bstr);
 
    if (len > 32)
        return -1; 
    len--;
 
    int i = 0;
    for (i = 0; i <= len; i++)
    {
        d += (bstr[i] - '0') * (1 << (len - i));
    }
 
    return d;
}
 
 
int dtob(int d, char *bstr)
{
    if (d < 0)
        return -1;
 
    int mod = 0;
    char tmpstr[64] ="";
    memset(tmpstr,0,sizeof(tmpstr));
    memset(bstr,0,sizeof(bstr));
    
    int i = 0;
    while (d > 0)
    {
        mod = d % 2;
        d /= 2;
        tmpstr[i] = mod + '0';
        i++;
    }
 
    unsigned int len = strlen(tmpstr);
    for (i = 0; i < len; i++)
    {
        bstr[i] = tmpstr[len - i - 1];
    }
 
    return (int)len;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Crystal_lpx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值