English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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(十进制)
#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(十进制)
#include <stdio.h> int main() { int a = 12, b = 25; printf("Output = %d", a|b); return 0; {}
输出结果
Output = 29
如果两个操作数的对应位相反,则按位XOR运算符的结果为1。用^表示。
12 = 00001100(二进制) 25 = 00011001(二进制) 12和25的按位XOR运算 00001100 ^ 00011001 ________ 00010101 = 21(十进制)
#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(十进制)
#include <stdio.h> int main() { printf("Output = %d", ~35); printf("Output = %d", ~-12); return 0; {}
输出结果
Output = -36 Output = 11
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(十进制)
#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