Guest Posted March 24, 2012 at 02:43 PM Report #445460 Posted March 24, 2012 at 02:43 PM Tenho este codigo mas estou com alguma dificuldade em dissecá lo se. #include<stdio.h> unsigned getbits(unsigned x, int p, int n) { return (x >> (p+1-n)) & ~(~0 << n); } int main(void) { unsigned x = 8; int p = 4; int n = 3; printf("%d",getbits(x,p,n)); return 0; } (x >> (p+1-n)) Esta parte dá 2 logo 010. ~(~0 << n) Aqui é que não estou a perceber muito bem quantos 1 é que necesito para o ~0. Desde já obrigado pelo tempo concedido
pmg Posted March 24, 2012 at 02:56 PM Report #445463 Posted March 24, 2012 at 02:56 PM Isto isola n bits a partir da posicao p do valor em x. A parte do ~(~0 << n) faz-te um numero cuja expansao em binario termina em n 1's o ~0 e uma sequencia de 1's; com o shift para a esquerda de n bits fica um numero que e so 1's excepto os n bits da direita que sao 0's e depois o ~ externo troca todos os 1's por 0's e vice-versa Imagina que x = 0xFF08; p = 4; e n = 3 1111111100001000 >> 2 0011111111000010 & 0000000000000111 [ ~(~0 << 3) ] 0000000000000010 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!
Guest Posted March 24, 2012 at 04:18 PM Report #445470 Posted March 24, 2012 at 04:18 PM ~0 << 3 não séria 0000000000000011 uma vez que 3 é 011 ?
pmg Posted March 24, 2012 at 04:54 PM Report #445471 Posted March 24, 2012 at 04:54 PM ~0 << 3 não séria 0000000000000011 uma vez que 3 é 011 ? Nao. O operador << desloca para a esquerda o primeiro operando tantos bits quantos o valor do segundo operando, ou seja, multiplica por 2 levantado ao valor do segundo operando. ~0 é 11111111111111111111111 111111111111111111111 deslocado para a esquerda 3 bits é 11111111111111111000 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!
Guest Posted March 24, 2012 at 08:09 PM Report #445501 Posted March 24, 2012 at 08:09 PM Ah ok. Obrigado
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now