位操作列表
| 符号 | 中文名 | 英文 | 
|---|---|---|
| & | 按位与 | bitwise AND | 
| | | 按位或 | Bitwise OR | 
| ^ | 按位异或 | Bitwise XOR | 
| << | 按位左移 | Shift Left | 
| >> | 按位右移 | Shift Right | 
| ~ | 按位取反 | Bitwise NOT | 
所有位运算的规则
低位:靠后的位
 高位:靠前的位
 低位对齐,高位补0, 对每一位分别执行计算规则(下文说)
00 10 11 10 (运算数1)
00 00 00 11 (运算数2)
-----------------------------------------
00 00 00 10 (运算结果)
一、按位与
1.计算规则
0 & 0 = 0;
0 & 1 = 0;
1 & 1 = 1;
不同大小的数据位操作的原则,低位对齐,高位补零。
2.用途
可用作数位屏蔽
00 10 11 10 (运算数1)
00 00 00 11 (屏蔽遮罩)00 00 00 10 (屏蔽结果)
屏蔽除了最后两位以外的其他位
二、按位或
1.运算规则
1 | 1 = 1
1 | 0 = 1
0 | 0 = 0
一个是1就是1
2.用途
定向修改数位为1
10 00 01 10 (运算数1)
00 00 00 01 (遮罩)
10 00 01 11 (结果)
三、按位移动
1.运算规则
原则是高位舍弃,低位补零。
 符号位不参与计算!!!!没有溢出检查!!
 计算 2<<2的结果如下,右移同理
00 00 00 10 (运算数1)
00 00 10 00 (左移2位结果)
a << k = a * 2k
 a >> k = a * 2(-k)
四、按位取反
1.运算规则
让每一位0变1,1变0
~1 = 0
~0 = 1
2.用途
取反的一个用途可以是获取补码反码等,笔者并不知道太现实的用途
五、按位异或
1.运算规则
不同为1,相同为0
0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
2.用途
1.对称加密
#include<stdio.h>
int main()
{
	int a = 1000;
	int key = 95689792966;
	//每两次运算回到原样
	a = a ^ key;
	printf("按Key加密结果:%d\n",a);
	a = a ^ key;
	printf("按Key解密结果:%d\n",a);
}

两次就回到正常
2.交换数值
#include<stdio.h>
int main()
{
	int a = 30;
	int b = 50;
	printf("a=%d  b=%d\n", a, b);
	//交换过程
	//a = (a^b)
	// b = b^(a^b) = a
	// a = (a^b)^a
	a^=b;
	b^=a;
	a^=b;
	
	printf("a=%d  b=%d\n", a, b);
	return 0;
}



















