2016-06-07 1 views
1

J'ai écrit ceci jusqu'à ce que je me rende compte que * est une opération arithmétique.Conversion de binaire en décimal sans utiliser d'opérations arithmétiques

Je souhaite renvoyer une représentation entière non négative de l'entrée de la séquence binaire. C'EST À DIRE. 0x4A retourne 74 en décimal

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; 
} 

:(

Comment dois-je cette conversion si je ne peux pas utiliser des opérations arithmétiques autres que +/-?

+2

Vous avez manqué%, + et/qui sont aussi des opérations arithmétiques. Mais pourquoi? – gnasher729

+3

Si votre fonction est de retourner un 'int', dans quel sens pensez-vous que cette valeur soit décimale plutôt que binaire? –

+0

Vous devriez vérifier vos besoins. Vous devrez peut-être produire une chaîne ou un tableau de caractères, plutôt qu'un int. Quant à la conversion, vous pouvez le faire avec des décalages et des masques, bien que ce soit difficile pour la base 10 (n'étant pas une puissance de 2). – Kenster

Répondre

-1

As + et - sont autorisés ... au lieu de multiplier dans k*reamainder try boucle cette façon

int n;//consider new int 

Dans la boucle while écrire la première ligne comme

n=remainder; 

au lieu de *

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

Cela ferait la multiplication :).

Et pour x 10%, construire une fonction

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

Et pour x/10, il serait le même, mais vous devez retourner nombre de fois que vous soustrait comme ceci:

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

edit: Si + et - ne sont pas autorisés, essayez de faire des fonctions pour eux en utilisant des opérateurs binaires et utilisez-les au lieu de + et - dans la réponse ci-dessus!

+1

Au moment où la prémisse est erronée, pourquoi supposez-vous que la partie «+» de «+ =» serait permise si l'on veut éviter les opérations arithmétiques? –

+0

+/- sont autorisés, ils sont les seules exceptions dans la question –

+0

N'a pas mentionné Op dans la dernière ligne qu'il ne peut utiliser +/et - @JohnBollinger voir la dernière ligne – Cherubim

1

Depuis + est également une opération arithmétique , il devient difficile Selon les règles exactes, à l'aide d'une table de recherche pourrait être acceptable. return lookuptable[x];

+0

Vous pouvez utiliser une instruction switch vraiment grande :-) – gnasher729

+2

Et dans quel sens le ** décimal ** int est-il retourné si l'entrée doit être considérée comme non-décimale? –

+0

Je ne pense pas que ce soit difficile ... Si OP pouvait écrire des fonctions pour + et - en utilisant des opérateurs binaires et se reposer de la façon dont j'utilise ces fonctions pour ajouter et soustraire ... Je pense que ce n'est pas difficile – Cherubim