Ir para o conteúdo
mundo

Funçao Trailing zeros

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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)

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mundo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.