Ir para o conteúdo
dario1133

Operações com bits

Mensagens Recomendadas

dario1133

Tenho a seguinte variável (char):

msgtype = 0100 0000

Quero ficar apenas com os 6 bits menos significativos (00 0000).

Penso que tenho de fazer um & com (0000 0000) mas não sei como fazer.

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

primeiro de tudo, vou assumir uma coisas :

- o "código" que apresentas não é código, porque estás a atribuir o valor 1000000 (decimal) à variável msgtype

segundo, existem várias maneira de obter o que pretendes:

char result;
char msgtype = 0x40;

/* exemplo 1:
*
*   0x3F = 111111
*/
result = msgtype & 0x3F;

/* exemplo 3:
*
*   0xC0 = 11000000
*  ~0xC0 = 00111111
*/
result = msgtype & ~0xC0;

/* exemplo 3:
*
*  XXAB CDEF << 2 = ABCD EF00
*  ABCD EF00 >> 2 = 00AB CDEF
*/
result = (msgtype << 2) >> 2;

eu gosto mais da terceira solução porque é mais versátil. deixa-te ter coisas como :

char result;
char nbits;
char msgtype;

msgtype = 0x40;
nbits = 6;

result = (msgtype << (sizeof(msgtype) * 8 - nbits)) >> (sizeof(msgtype) * 8 - nbits);
/* result = <nbits> bits menos significativos */

result = msgtype >> (sizeof(msgtype) * 8 - nbits);
/* result = <nbits> bits mais significativos */


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.