Operações com Bits - Programação 1 - Engenharia
Ir para navegação
Ir para pesquisar
Objetivos
- operações com bits
Operações bit a bit disponíveis
Symbol | Operator |
---|---|
& | bitwise AND |
l | bitwise inclusive OR |
^ | bitwise exclusive OR |
<< | left shift |
>> | right shift |
~ | one's complement (unary) |
Rotacionando a direita
#include <stdio.h>
main()
{
unsigned char i;
i=0x80;
printf("i=%d ou em hex i=0x%x\n", i, i);
i=i>>2; /* rotaciona dois bits a direita */
printf("i=%d ou em hex i=0x%x\n", i, i);
}
Note que na memória o valor 0x80 aparece como:
10000000
Rotacionando dois bits a esquerda este valor fica:
00100000
Que corresponde ao valor 0x40
Rotacionando a esquerda
#include <stdio.h>
main()
{
unsigned char i;
i=0x14;
printf("i=%d ou em hex i=0x%x\n", i, i);
i=i<<3; /* rotaciona três bits a esquerda */
printf("i=%d ou em hex i=0x%x\n", i, i);
}
Note que na memória o valor 0x80 aparece como:
00010100
Rotacionando três bits a esquerda este valor fica:
10100000
Que corresponde ao valor 0xA0
NOTE que uma rotação a direita corresponde em dividir o número por 2 enquanto uma rotação a esquerda corresponde a multiplicar o número por 2.
Operações lógicas bit a bit
Lembrar que :
bit a | bit b | a & b (a AND b) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
bit a | bit b | a | b (a OR b) |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
#include <stdio.h>
main()
{
unsigned char i;
i=0xF2;
printf("Operação E com a máscará 0x03 -> %x\n", i&0x03);
printf("Operação OR com a máscará 0x03 -> %x\n", i|0x03);
printf("Operação OR EXCLUSIVO com a máscará 0x03 -> %x\n", i^0x03);
printf("Complementando i -> %x\n", (char)~i);
}
Note que as operações acima são realizadas em nível de bit e não conforme as operações lógicas realizadas sobre expressões.
Exercício:
Implementar uma função que retorna o valor da operação lógica bita a bit sobre os valores de um vetor de bytes como parâmetro. Veja esqueleto abaixo.
unsigned char oplog (unsigned char pVetor[], int tam, char operador)
{
}
main()
{
unsigned char alfa[3] = { 0xFF,0xAA,0x00};
unsigned char valor;
valor = oplog(alfa, 3, '|'); /* calcula o OU bit a bit sobre o vetor */
valor = oplog(alfa, 3, '&'); /* calcula o E bit a bit sobre o vetor */
valor = oplog(alfa, 3, '^'); /* calcula o OU EXCLUSIVO bit a bit sobre o vetor */
}