Tutorial Avançado em Linguagem C (Operações de Bits e Representação de Números Base)


Prefácio

Este artigo explicará as operações de bits na linguagem C. As operações de bits são frequentemente usadas em sistemas embarcados, então vamos aprender sobre as operações de bits na linguagem C.

1. Mova para a esquerda e para a direita

Na linguagem C, deslocamento para a esquerda (<<) e deslocamento para a direita (>>) são operadores de operação de bits, usados ​​para realizar operações em nível de bit em dados do tipo inteiro. Esses operadores movem uma representação binária de um valor inteiro para a esquerda ou para a direita por um número especificado de bits, preenchendo ou descartando bits dependendo da direção do movimento.

O operador de deslocamento para a esquerda (<<) desloca todos os dígitos binários de um número para a esquerda em um certo número de bits e preenche os bits vagos à direita com zeros. Sua sintaxe é:

result = operand << n;

Dentre eles, operando é o valor a ser operado, n é o número de dígitos a serem deslocados para a esquerda e resultado é o resultado do cálculo. O efeito da operação de deslocamento para a esquerda é deslocar a representação binária do operando para a esquerda em n bits.

Por exemplo, suponha que exista uma variável inteira x com valor 5 e sua representação binária seja 0000 0101. Nós a deslocamos duas casas para a esquerda, ou seja, x << 2:

int x = 5;
int result = x << 2;

Depois de deslocar duas casas para a esquerda, o valor binário torna-se 0001 0100 (representação binária) e o número decimal correspondente é 20. Portanto, o valor do resultado será 20.

O operador de deslocamento para a direita (>>) desloca todos os dígitos binários de um número para a direita em um certo número de bits, mas existem duas formas de operador de deslocamento para a direita: deslocamento lógico para a direita e deslocamento aritmético para a direita.

逻辑右移(logical right shift):右移过程中左侧空出的位用零填充,适用于无符号数。

算术右移(arithmetic right shift):右移过程中左侧空出的位用符号位填充,适用于带符号数。

Sua sintaxe é:

result = operand >> n;

Dentre eles, operando é o valor a ser operado, n é o número de dígitos a serem deslocados para a direita e resultado é o resultado do cálculo. O efeito da operação de deslocamento para a direita é deslocar a representação binária do operando para a direita em n bits.

Por exemplo, existe uma variável inteira com sinal x com valor 15 (a representação binária é 0000 1111). Nós a deslocamos três casas para a direita, ou seja, x >> 3:

int x = 15;
int result = x >> 3;

Após o deslocamento lógico para a direita, o valor binário torna-se 0000 0001 e o número decimal correspondente é 1, portanto o valor do resultado será 1.

Deve-se notar que a operação de deslocamento para a direita preserva o bit de sinal para inteiros com sinal, portanto, se o valor original for negativo (o bit de sinal é 1), o deslocamento aritmético para a direita preencherá 1, de modo que o resultado ainda será negativo.

2. Limpe o bit correspondente para 0 e defina o bit correspondente para 1

Definir e limpar um determinado bit é muito comum em sistemas embarcados. Aqui veremos como definir um determinado bit como 1 e limpar um determinado bit como 0.

1.Defina o bit correspondente para 1

#include <stdio.h>


int main(void)
{
    
    
    unsigned char a = 0;
    int i = 0;
    scanf("%d", &i);

    printf("a = %d\n", a | (1 << i));//设置第i位为1

    return 0;
}


Desloque 1 para a esquerda por i bits usando o operador bit a bit | e execute uma operação OR bit a bit no resultado com a variável a. Isso define o i-ésimo bit da variável a como 1, deixando os outros bits inalterados.

2. Limpe o bit correspondente para 0

#include <stdio.h>


int main(void)
{
    
    
    unsigned char a = 255;
    int i = 0;
    scanf("%d", &i);

    printf("a = %d\n", a & ~(1 << i));

    return 0;
}

Use o operador de bit ~ para deslocar 1 para a esquerda em i bits e execute uma operação AND bit a bit no resultado com a variável a. Isso define o i-ésimo bit da variável a como 0, deixando os outros bits inalterados.

3. Representação de números básicos

Na linguagem C, os números podem ser representados em diferentes bases, incluindo decimal, octal e hexadecimal. A seguir está a representação dessas bases e os exemplos de código C correspondentes:

1. Sistema decimal: O sistema decimal é o sistema mais comum em nossa vida diária e os números estão no sistema decimal por padrão. Por exemplo, o número 42 é decimal.

int decimalNumber = 42;

2. Octal: Na linguagem C, os números octais começam com 0. Por exemplo, o número octal 052 representa 42 em decimal.

int octalNumber = 052;

3. Hexadecimal: Os números hexadecimais começam com 0x ou 0X. Por exemplo, o número hexadecimal 0x2A representa 42 em decimal.

int hexadecimalNumber = 0x2A;

Estes exemplos mostram como representar números em diferentes bases em C. Você pode usar essas representações para inicializar variáveis ​​inteiras, realizar operações aritméticas ou exibi-las na tela. Observe que a linguagem C usa decimal por padrão. Se precisar converter entre outras bases, pode ser necessário usar funções ou operações relacionadas para conseguir isso.

4. & ^ | ~

1. E & & bit a bit:

Operador: &
Função: Execute uma operação AND bit a bit e compare os bits correspondentes dos dois operandos. Se ambos os bits forem 1, o bit resultante será 1, caso contrário, será 0.
Código de amostra:

int x = 5; // 二进制表示为 0101
int y = 3; // 二进制表示为 0011
int result = x & y; // 结果为 0001,即 1

2. OU bit a bit |:

Operador: |
Função: Executa uma operação OR bit a bit e compara os bits correspondentes dos dois operandos. Se algum bit for 1, o bit resultante será 1.
Código de amostra:

int x = 5; // 二进制表示为 0101
int y = 3; // 二进制表示为 0011
int result = x | y; // 结果为 0111,即 7

3. XOR bit a bit:

Operador: ^
Função: Executa uma operação XOR bit a bit e compara os bits correspondentes dos dois operandos. Se os dois bits forem diferentes, o bit resultante é 1, se forem iguais, é 0.
Código de amostra:

int x = 5; // 二进制表示为 0101
int y = 3; // 二进制表示为 0011
int result = x ^ y; // 结果为 0110,即 6

4. Negação bit a bit ~:

Operador: ~
Função: Execute uma operação de inversão bit a bit, inverta cada bit binário de um número inteiro, altere 1 para 0 e altere 0 para 1.
Código de amostra:

int x = 5; // 二进制表示为 0101
int result = ~x; // 结果为 1010,即 -6(根据补码表示)

Resumir

Este artigo termina aqui.Espero que você tenha uma compreensão sólida do conhecimento explicado acima.

Acho que você gosta

Origin blog.csdn.net/m0_49476241/article/details/131879773
Recomendado
Clasificación