进制转换和按位运算

来源:互联网 发布:淘宝商家规则 编辑:程序博客网 时间:2024/06/06 07:06
#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;
}
0 0