English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriel de base du langage C

Contrôle de flux de langage C

Fonctions en C

Tableaux en C

Pointeurs en C

Chaînes de caractères en C

Structure de langage C

Fichier de langage C

Autres C

Manuel de référence du langage C

opérateurs de niveau bits en langage C

Dans ce tutoriel, vous découvrirez par exemple tous les6un opérateur de niveau bits.

Dans l'unité d'arithmétique et de logique (située à l'intérieur du CPU), les opérations mathématiques telles que l'addition, la soustraction, la multiplication et la division sont effectuées au niveau des bits. Pour effectuer des opérations de niveau bits en programmation C, utilisez les opérateurs de niveau bits.

Opérateur
Signification des opérateurs
&&Opération ET binaire
|Opération OU binaire
^Opération de XOR binaire
~Complément à un bit
<<左移位
>>右移位

按位与运算符&

如果两个操作数的对应位为1,则按位与的输出为1。如果一个操作数的任一位为0,则对应位的结果为0。

让我们假设两个整数12和25的按位与运算。

12 = 00001100(二进制)
25 = 00011001(二进制)
12和25的位运算
  00001100
&00011001
  ________
  00001000 = 8(十进制)

范例1:按位与

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a&b);
    return 0;
{}

输出结果

Output = 8

按位或运算符|

如果两个操作数的至少一个对应位为1,则按位OR的输出为1。在C编程中,按|表示按位OR运算符。

12 = 00001100(二进制)
25 = 00011001(二进制)
12和25的按位或运算
  00001100
| 00011001
  ________
  00011101 = 29(十进制)

范例2:按位或

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a|b);
    return 0;
{}

输出结果

Output = 29

按位XOR(异或)运算符^

如果两个操作数的对应位相反,则按位XOR运算符的结果为1。用^表示。

12 = 00001100(二进制)
25 = 00011001(二进制)
12和25的按位XOR运算
  00001100
^ 00011001
  ________
  00010101 = 21(十进制)

例3:按位XOR

#include <stdio.h>
int main()
{
    int a = 12, b = 25;
    printf("Output = %d", a^b);
    return 0;
{}

输出结果

Output = 21

按位补运算符〜

按位补运算符是一元运算符(仅在一个操作数上起作用)。 它将1更改为0,将0更改为1。用~表示。

35 = 00100011(二进制)
35的按位补码运算
〜00100011 
  ________
  11011100 = 220(十进制)

范例4:按位补示例

#include <stdio.h>
int main()
{
    printf("Output = %d", ~35);
    printf("Output = %d", ~-12);
    return 0;
{}

输出结果

Output = -36
Output = 11

C语言编程中的移位运算符

C语言编程中有两个移位运算符:

  • 右移运算符

  • 左移运算符。

右移运算符

右移运算符将所有位向右移位指定数量的指定位。用>>表示。

212 = 11010100(二进制)
212 >> 2 = 00110101(二进制)[右移两位]
212 >> 7 = 00000001(二进制)
212 >> 8 = 00000000 
212 >> 0 = 11010100(无移位)

左移运算符

左移运算符将所有位向左移特定数量的指定位。用<<表示。

212 = 11010100(二进制)
212 << 1 = 110101000(二进制)[左移一位]
212 << 0 = 11010100(移位0)
212 << 4 = 110101000000(二进制)= 3392(十进制)

示例#5:移位运算符

#include <stdio.h>
int main()
{
    int num=212, i;
    for (i=0; i<=2; ++i)
        printf("décalage de droite %d: %d\n", i, num>>i);
     printf("\n");
     for (i=0; i<=2; ++i) 
        printf("décalage de gauche %d: %d\n", i, num<<i);    
    
     return 0;
{}

Résultat de la sortie :

Déplacement à droite 0: 212
Déplacement à droite 1: 106
Déplacement à droite 2: 53
Déplacement à gauche 0: 212
Déplacement à gauche 1: 424
Déplacement à gauche 2: 848