一、概述
从这几个操作符的名称来看,都是按位什么,那他按的是什么位呢?以int整型来举例,一个int型变量占4个字节大小,而一个字节是8个比特位,所以一个int型变量就有32个比特位。比特位就是计算机中最小的单位,用来存放二进制数。因为计算机只能识别二进制数,所以我们计算机上所有的数据都是先转换成二进制数然后再进行处理的。例如,我们定义一个整型变量 int a = 8; 我们看到的数字是“8”,而计算机看到的就是“000…0001”,位操作符就是按比特位操作的。
二、操作符的功能
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 6;
printf("按位与:%3d\n按位或:%3d\n按位异或:%d\n", a & 5, a | 5, a ^ 5);
system("pause");
return 0;
}
6的二进制是 000…0110,5的二进制是000…0101,按位与,即按每一个比特位进行与运算,按照与运算的规则,0&0为0;0&1为0;1&1为1,000…0110&000…0101的结果就是:000…0100。换算成十进制就是4。所以a&5的结果是:4;同理,按照或运算的规则:0|0为0;0|1为1;1|1为1,a|5的就过就是000…00111。十进制表示就是:7。异或运算得到规则:0^0为0; 0^1为1; 1^1为1,a ^5的结果就是000…0011。十进制表示就是:3。
三、例题
题目:
不创建第三个变量,交换两个数的值
代码演示
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 4;
int b = 8;
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("a=%d,b=%d\n", a, b);
system("pause");
return 0;
}
先定义两个变量a,b,并赋初值4和8。二进制表示为:000…0010和000…1000。第一个语句执行结束后a的值为000…1010,b为000…1000;第二个语句执行结束后a的值为000…1010,b的值为000…0010;第三个语句执行结束后a的值为000…1000,b的值为000…0010;十进制表示为8和4。