位运算在C言语中是一种非常富强的东西,它容许开辟者对整数中的单个位停止操纵。这种操纵不只可能优化顺序机能,还能实现一些高等的功能。本文将深刻探究C言语中的位运算技能,帮助读者控制这一富强的东西。
位运算是对二进制数停止操纵的运算,它包含按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)跟右移(>>)六种操纵。
按位与运算符“&”是比较两个数的响应位,假如两个位都为1,则成果为1,不然为0。
int a = 9; // 二进制:0000 0000 0000 0000 0000 0000 0000 1001
int b = 5; // 二进制:0000 0000 0000 0000 0000 0000 0000 0101
int c = a & b; // 二进制:0000 0000 0000 0000 0000 0000 0000 0001 (成果为1)
按位或运算符“|”是假如两个数的响应位至少有一个为1,则成果为1,不然为0。
int a = 9; // 二进制:0000 0000 0000 0000 0000 0000 0000 1001
int b = 5; // 二进制:0000 0000 0000 0000 0000 0000 0000 0101
int c = a | b; // 二进制:0000 0000 0000 0000 0000 0000 0000 1110 (成果为14)
按位异或运算符“^”是假如两个数的响应位差别,则成果为1,不然为0。
int a = 9; // 二进制:0000 0000 0000 0000 0000 0000 0000 1001
int b = 5; // 二进制:0000 0000 0000 0000 0000 0000 0000 0101
int c = a ^ b; // 二进制:0000 0000 0000 0000 0000 0000 0000 1110 (成果为14)
按位取反运算符“~”是对数的全部位取反,即0变1,1变0。
int a = 9; // 二进制:0000 0000 0000 0000 0000 0000 0000 1001
int c = ~a; // 二进制:1111 1111 1111 1111 1111 1111 1111 0110 (成果为-10)
左移运算符“<<”是将数的全部位向左挪动指定的位数,左边补0。
int a = 9; // 二进制:0000 0000 0000 0000 0000 0000 0000 1001
int c = a << 2; // 二进制:0000 0000 0000 0000 0000 0000 0010 1000 (成果为36)
右移运算符“>>”是将数的全部位向右挪动指定的位数,左边补0(逻辑右移)或保存最高位(算术右移)。
int a = 9; // 二进制:0000 0000 0000 0000 0000 0000 0000 1001
int c = a >> 2; // 二进制:0000 0000 0000 0000 0000 0000 0000 0011 (成果为3)
可能利用按位与运算符来断定一个数是奇数还是偶数。
int num = 5;
if (num & 1) {
printf("奇数\n");
} else {
printf("偶数\n");
}
可能利用异或运算符来交换两个数,而不须要利用常设变量。
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a = %d, b = %d\n", a, b); // 输出:a = 20, b = 10
可能利用按位与跟按位或运算符来清除或设置特定的位。
int a = 10; // 二进制:0000 0000 0000 0000 0000 0000 0000 1010
int b = 0xFF; // 二进制:1111 1111 1111 1111 1111 1111 1111 1111
// 清除第3位
a = a & ~b;
// 设置第3位
a = a | b;
位运算在C言语中是一种富强的东西,它可能帮助开辟者实现高效的位操纵。经由过程控制位运算技能,可能优化顺序机能并实现一些高等功能。盼望本文能帮助读者更好地懂得跟利用位运算。