Ponto de Conhecimento 2: Operador

Operador

1 ,Depois que o operador é um todo
Tal como: a * = b + c; é equivalente a a = a * (b + c);

2. O resultado da operação relacional é booleano. Os valores booleanos (booleanos) possuem apenas dois valores: 1 e 0, ou seja, verdadeiro e falso.

3. Ao calcular uma expressão lógica, a expressão é resolvida apenas quando a próxima expressão deve ser executada para ser resolvida. Em outras palavras, nem todas as expressões são executadas.

4. O operador vírgula (operador de avaliação sequencial).
O operador vírgula tem a precedência mais baixa e a direção da combinação é da esquerda para a direita. Sua função é: conectar duas expressões para formar uma expressão (chamada de expressão de vírgula).
Seu formato geral é: 表达式1, 表达式2;
seu processo de avaliação é primeiro resolver a expressão 1 e, em seguida, resolver a expressão 2 e usar o valor da expressão 2 como o valor de toda a expressão da vírgula.
Generalização: 表达式1, 表达式2, 表达式3,... ,表达式n;
use o valor da expressão n como o valor de toda a expressão de vírgula.
Por exemplo:

int a = 4, b = 6, c = 8, r1, r2;
r1 = a + b, r2 = b + c;
printf("%d, %d", r1, r2);//输出10,14
//本例中r2等于整个逗号表达式的值,即表达式2的值;r1是第一个表达式的值。

Por exemplo: x = 1, y = 2, z = 3;e x = 1; y = 2; z = 3;equivalente
. O uso de uma expressão de vírgula em um programa geralmente requer o valor de cada expressão na expressão de vírgula separadamente e não requer necessariamente o valor de toda a expressão de vírgula.

int a, b, c, d;
c = (a = 3, 2 * a);//将一个逗号表达式的值赋给c
d = b = 3, 2 * a;//逗号仅作为分隔符
printf("%d,%d,%d,%d\n", a, b, c, d);//3,3,6,3
return 0;

5. Operação de broca

Preste atenção ao número de bytes do tipo de dado
1. O bit a bit "ou" operação "|" O
operador OR bit a bit "|" é um operador binocular, sua função é fazer com que os dois números envolvidos na operação correspondam à fase binária OU: enquanto houver um 1 no bit correspondente dos dois números, o resultado será 1 nesse bit.

Por exemplo: 3 | 7 a fórmula é:
0000 0011
0000 0111
—————
0000 0111
Outro exemplo: 64 | 63 a fórmula é:
0100 0000
0011 1111
——————
0111 1111

A partir do processo de cálculo acima, pode-se ver que se você quiser fazer com que os últimos 6 dígitos de um número binário sejam todos 1, você só precisa OR com 63; da mesma forma, se você quiser fazer com que os últimos 5 dígitos sejam todos 1, você só precisa OR com 31. É isso.
Resumo: Se você deseja definir um determinado número como 1, você só precisa realizar uma operação OR bit a bit com esses números que são 1.
2. Bitwise "e" operation "&"
Bitwise "and" operator & é um operador binocular, sua função é: fazer os dois números envolvidos na operação corresponderem à fase do bit binário e: apenas dois bits binários correspondentes são iguais. é 1, o bit de resultado é 1.

Por exemplo: 13 & 18 a fórmula é:
0000 1101
0001 0010
—————
0000 0000
pode ser visto, um propósito da operação E bit a bit é: limpar. Se o bit 1 no número original for 0, você só precisa fazer E o bit 0.
Outro exemplo: 31 & 22 a fórmula é:
0001 1111
0001 0110
—————
0001 0110

Você pode pegar alguns bits especificados de um número por E bit a bit. Por exemplo, se você quiser obter os últimos 5 dígitos de 22, precisará usar AND em um número cujos últimos 5 dígitos sejam todos 1.
3. Operação de inversão "~" O
operador de inversão "~" é um operador monocular, com associatividade à direita, e sua função é inverter a forma binária do número que participa da operação bit a bit: mudança 0 a 1, mudança 1 torna-se 0
Por exemplo: ~19a fórmula é:
0000 0000 0001 0011 -> 1111 1111 1110 1100
(observe o número de bytes ocupados pelo tipo de dados)
Observe que o bit mais à esquerda do número com sinal é o bit do sinal. Após a inversão, o positivo e o negativo mudará. Mas o resultado negativo não é o oposto do número original!
(Se você inverter um número e adicionar 1 ao final, ele será igual a 0 após adicionar ao número original, que é o método de armazenamento de números negativos: Inverta um número +000000001 = seu complemento oposto)
4, "Exclusivo OR "operação" ^ "
Operador OR exclusivo bit a bit" ^ "é um operador binário, sua função é fazer os bits binários dos dois números envolvidos na operação XOR: o resultado é 1 quando a diferença é diferente, e o resultado é o mesmo quando o resultado é o mesmo É 0.

Por exemplo: 44 ^ 25 a fórmula é:
0010 1100
0001 1001
—————
0011 0101

Um dos principais usos da operação XOR é:Inverta um bit específico

Por exemplo: Para reverter os últimos 4 dígitos de 69:
0100 0101
0000 1111
—————
0100 1010
Resumo: quais bits você deseja inverter são submetidos a XOR com os números cujos bits são 1 e os demais são 0

Outro uso da operação XOR é:Realize a troca de dois valores de variáveis ​​sem usar variáveis ​​temporárias.
Pode ser implementado da seguinte forma:

x = x ^ y;
y = x ^ y;
x = x ^ y;

A operação XOR é freqüentemente usada em algumas operações de criptografia relativamente simples.
5. Operações de "deslocamento para a esquerda" e "deslocamento para a direita" "<<", ">>"
Os operadores de deslocamento para a esquerda e direita são todos operadores binoculares.
A função de "<<" é: deslocar todos os bits binários do operando à esquerda de "<<" por alguns dígitos à esquerda, e o número à direita de "<<" especifica o número de dígitos para mover, os dígitos mais altos são descartados e os dígitos mais baixos são preenchidos com 0. (Preste atenção ao número de bytes do tipo de dados!)
Por exemplo: a << 2 significa que os bits binários de a são deslocados 2 bits para a esquerda.
Assumindo a = 0000 0110, é 0001 1000 após deslocar dois bits para a esquerda. a mudou de 6 para 24.
Nota: Quando o dígito deslocado não contém 1, deslocar para a esquerda por 1 dígito é equivalente a multiplicar o número por 2; deslocar para a esquerda por 2 dígitos é equivalente a multiplicar o número por 4 ...
A função de " >> "é: a operação à esquerda de" >> "Os dígitos binários do número são todos deslocados para a direita por vários dígitos, e o número à direita de" >> "especifica o número de dígitos a serem movidos.
Ao deslocar para a direita, para números com sinal, preste atenção especial ao bit de sinal:
quando é um número positivo, o bit mais alto é preenchido com 0;
quando é um número negativo, se o bit mais alto é preenchido com 0 ou 1 depende dos regulamentos do sistema do compilador. (O complemento de 0 é denominado "deslocamento lógico para a direita" e o complemento de 1 é denominado "deslocamento aritmético para a direita".)

//循环右移
//将x的右端n位先放到z中的高n位中
z = x << (16 - n);
//将x右移n位,其左边高n位补0
y = x >> n;
//将y与z进行 按位或运算
z = z | y;

//综上即:
z = x << (16-n) | x >> n;
//循环移位
//从键盘输入一个八进制数,然后输入要移动的位数(正数表示向右移位,负数表示向左移位),输出移位后的结果。
//Xcode里整型数据占两个字节
#include <stdio.h>

int right(unsigned value, int n)
{
    
    
    unsigned z;
    z = (value >> n) | (value << (16 - n));//循环右移的实现过程
    return (z);
}

int left(unsigned value, int n)
{
    
    
    unsigned z;
    z = (value >> (16-n)) | (value << n);//循环左移的实现过程
    return (z);
}

int main()
{
    
    
    unsigned a;
    int n;
    scanf("%o%d", &a, &n);//输入一个八进制数和要移动的位数
    if (n > 0) printf("%o", right(a, n));
    else
    {
    
    
        n = -n;
        printf("%o\n", left(a, n));
    }
    return 0;
}

Acho que você gosta

Origin blog.csdn.net/Shao_yihao/article/details/112788024
Recomendado
Clasificación