Jump to content
mundo

Funçao Trailing zeros

Recommended Posts

mundo

Boa tarde,

alguém me poderia dar umas luzes de como calcular o numero de bits a 0 no final de uma representação binaria de um numero.

A representação binária é passada como um unsigned int. A coisa que me passou pela cabeça era converter a representação para uma string e depois consultar cada posição, no entanto não podemos usar essa forma.

Cumprimentos

Share this post


Link to post
Share on other sites
HappyHippyHippo

presumo que no final estejas a falar nos dígitos menos significativos ...

int binario = 101001000;

/* ciclo */
 /* resto da divisão por 10 >> que valor dá ? */


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Miguel Correia
#include <stdio.h>
int trailingZ(unsigned int n){
   int conta=0;
    while(n != 0){
	    if(n % 2 == 0)
		    conta++;
	    n = n/2;
    }
return conta;

Share this post


Link to post
Share on other sites
mundo

Com isto:


int trailingZ(unsigned int n){
   int ct;

   while(n > 0){
       if(n%10 == 2){
           ct++;
       }
       n /= 2;
   }
   return ct;
}

até 3 zeros depois do um funciona, apartir dai funciona mal

Share this post


Link to post
Share on other sites
mundo

presumo que no final estejas a falar nos dígitos menos significativos ...

int binario = 101001000;

/* ciclo */
 /* resto da divisão por 10 >> que valor dá ? */

Nesse caso dá 0 o resto, se é que ainda sei fazer bem as contas disto lol

Share this post


Link to post
Share on other sites
pmg

Hmm ... parece que vai para aqui uma grande confusão entre "valor" e "representação".

Todos sabemos qual é o valor do número de dedos na mão direita da maioria dos utilizadores do forum.

Esse valor é uma coisa abstracta. Para usar o valor como informação é preciso representá-lo. Podeoms representá-lo em português: "cinco", em inglês: "five", em numeração decimal: "5", em numeração binária: "101", etc, etc, etc.

Se eu representar esse valor num determinado código, e, posteriormente interpretar o código como se fosse a representação dum valor com outro código, obtem-se resultados 'estranhos'.

Supoe que tens a representação do número de jogadores em campo num jogo de futebol em numeração binária (10110), mas interpretas essa codificação como se fosse numeração decimal. Não há balneários que aguentem 5055 jogadores!!!

Portanto ... mundo ... explica lá o que queres dizer com isto

A representação binária é passada como um unsigned int.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
mundo

O enunciado é este:

Defina uma função int trailingZ(unsigned int n) que cálcula o número de bits a 0 no final da representação binária de um número (i.e. o expoente da maior potência de 2 que é divisor desse número).

Eu deduzo que o unsigned int n seja a representação binaria do numero mas nao tenho a certeza.

Share this post


Link to post
Share on other sites
pmg

Esquece lá a representação.

O "unsigned int n" tem o valor numérico (na representação intrinsica do computador).

Se o programa te pedir para calcular o número de bits a 0 ... para o número de jogadores de futebol em campo no principio do jogo, uma linha possivel de codigo seria

nbits = trailingZ(22); // trailingZ(/*octal*/026) ou trailingZ(/*hexa*/0x1a)

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
mundo

Mas como apartir do decimal, obterei apenas os ultimos 0's da sua representação? Para esta situaçao nao consigo perceber.

Share this post


Link to post
Share on other sites
pmg

Para que valores é que a sua representação em binário acaba em "0"? (2, 4, 6, 8, ... os números pares)

Para que valores é que a sua representação em binário acaba em "00"? (4, 8, 12, ... os múltiplos de 4)

Consegues determinar alguma relação entre o primeiro grupo e o segundo?

...

Para que valores é que a sua representação em binário acaba em "000"? (8, 16, 24, ... os múltiplos de 8)


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
HappyHippyHippo

nesse caso a solução será:

/* ciclo */
 /* operação binária & do valor com o valor 1 ? para que servirá este passo ? */
 /* right-shift-logical do valor em 1 posição */


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.