在不使用算术运算的情况下从二进制转换为十进制

时间:2016-06-07 20:52:52

标签: c binary ieee-754 16-bit

我写了这个,直到我意识到*是算术运算。

我想返回二进制序列输入的非负整数表示。 IE浏览器。 0x4a以十进制

返回74
typedef unsigned bit16;

unsigned int bin_to_dec(bit16 x)
{
int dec=0;
int k=0;
int remainder;

while (x!= 0){
    remainder = x%10;
    dec+=remainder*k;
    k=k+2;
    x=x/10;
}

:(

如果我不能使用+/-以外的算术运算,我将如何进行此转换?

2 个答案:

答案 0 :(得分:1)

由于+也是算术运算,因此变得困难。根据具体规则,可以使用查找表:return lookuptable[x];

答案 1 :(得分:-1)

允许+和 - 允许...而不是乘以k*reamainder尝试以这种方式循环

int n;//consider new int

在while循环中将第一行写为

n=remainder;

而不是*

for(i=0;i<k;i++)
    remainder+=n;

这会做乘法:)。

对于x%10,构造一个函数

int mod(int n)
{
   int m;
   while(n>0)
   {
      n=n-10;
      m=n;
    }
   return m;
}

对于x / 10,它是相同的,但你必须返回你这样减去的次数:

int mod(int n)
{
   int count=0;
   while(n>0)
   {
      count=count+1;
      n=n-10;
   }
   return count;
}

编辑:如果+和 - 也不允许尝试使用二元运算符为它们创建函数,并在上面的答案中使用它们而不是+和 - !