Conversion de decimal a binario y complemento de dos

Publicado por Mao614
hace 9 años

<p>Hola tengo un problema con mi codigo cuando, tengo dos funciones, binario y complemento a dos, cuando hago la llamada a la funcion binario no hay problema pero cuando ingreso un numero negativo me tiene que dar el complemento a dos y ahi ya no me sale. Pensaba que capaz debia hacer divisiones sucesivas hasta llegar a 1 de derecha a izquierda y despues los digitos que le sigan cambiar los ceros por uno y viceversa</p><p>dejo mi codigo. gracias.</p><pre class="prettyprint prettyprinted"><span class="kwd">int</span><span class="pln"> binario</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> num</span><span class="pun">);</span><br /><span class="kwd">int</span><span class="pln"> invertir</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> num</span><span class="pun">);</span><br /><span class="kwd">int</span><span class="pln"> main</span><span class="pun">()</span><br /><span class="pun">{</span><br /><span class="pln">    </span><span class="kwd">int</span><span class="pln"> num</span><span class="pun">,</span><span class="pln">complemento</span><span class="pun">,</span><span class="pln">res</span><span class="pun">;</span><br /><span class="pln">    printf</span><span class="pun">(</span><span class="str">"Bits en la RAM\n\n"</span><span class="pun">);</span><br /><span class="pln">    printf</span><span class="pun">(</span><span class="str">"Dame un valor entero: "</span><span class="pun">);</span><br /><span class="pln">    scanf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,&</span><span class="pln">num</span><span class="pun">);</span><br /><span class="pln">    </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">num</span><span class="pun">></span><span class="lit">0</span><span class="pun">)</span><br /><span class="pln">        binario</span><span class="pun">(</span><span class="pln">num</span><span class="pun">);</span><br /><span class="pln">    </span><span class="kwd">else</span><span class="pln"> </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">num</span><span class="pun"><</span><span class="lit">0</span><span class="pun">)</span><br /><span class="pln">    </span><span class="pun">{</span><br /><span class="pln">        complemento</span><span class="pun">=</span><span class="pln">binario</span><span class="pun">(</span><span class="pln">num</span><span class="pun">);</span><br /><span class="pln">        res</span><span class="pun">=</span><span class="pln">complemento_a_dos</span><span class="pun">(</span><span class="pln">complemento</span><span class="pun">);</span><br /><span class="pln">    </span><span class="pun">}</span><br /><span class="pln">    </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><br /><span class="pun">}</span><br /><span class="kwd">int</span><span class="pln"> binario</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> num</span><span class="pun">)</span><br /><span class="pun">{</span><br /><span class="pln">    </span><span class="kwd">if</span><span class="pun">(</span><span class="pln">num</span><span class="pun">></span><span class="lit">1</span><span class="pun">)</span><br /><span class="pln">    </span><span class="pun">{</span><br /><span class="pln">        binario</span><span class="pun">(</span><span class="pln">num</span><span class="pun">/</span><span class="lit">2</span><span class="pun">);</span><br /><span class="pln">        num</span><span class="pun">%=</span><span class="lit">2</span><span class="pun">;</span><br /><span class="pln">        printf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,</span><span class="pln">num</span><span class="pun">);</span><br /><span class="pln">    </span><span class="pun">}</span><br /><span class="pln">    </span><span class="kwd">else</span><br /><span class="pln">    </span><span class="pun">{</span><br /><span class="pln">        printf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,</span><span class="pln">num</span><span class="pun">);</span><br /><span class="pln">        </span><span class="kwd">return</span><span class="pln"> num</span><span class="pun">;</span><br /><span class="pln">    </span><span class="pun">}</span><br /><span class="pln">    </span><span class="kwd">return</span><span class="pln"> </span><span class="lit">0</span><span class="pun">;</span><br /><span class="pun">}</span><br /><span class="kwd">int</span><span class="pln"> complemento_a_dos</span><span class="pun">(</span><span class="kwd">int</span><span class="pln"> complemento</span><span class="pun">)</span><br /><span class="pun">{</span><br /><span class="pln">    </span><span class="kwd">int</span><span class="pln"> res</span><span class="pun">;</span><br /><span class="pln">    </span><span class="kwd">while</span><span class="pun">((</span><span class="pln">complemento</span><span class="pun">%=</span><span class="lit">10</span><span class="pun">)!=</span><span class="lit">1</span><span class="pun">){</span><br /><span class="pln">    complemento</span><span class="pun">/=</span><span class="lit">10</span><span class="pun">;</span><br /><span class="pln">    </span><span class="pun">}</span><br /><span class="pln">       res</span><span class="pun">=~(</span><span class="pln">complemento</span><span class="pun">%=</span><span class="lit">10</span><span class="pun">);</span><br /><span class="pln"> </span><span class="kwd">return</span><span class="pln"> res</span><span class="pun">;</span><br /><span class="pun">}</span></pre>

binario c
Respuesta de Lucas
hace 9 años

<pre class="prettyprint prettyprinted"><span class="pln">Fijate que binario() no es reutilizable como función y sólo devuelve 0, por lo que al hacer complementoo de 0 tenés el problema.<br /><br /></span><span class="pun"><br /></span></pre>