您的位置:首页 > 其它

利用数学知识快速理解按位与& 按位或| 按位异或^ 按位取反~

2014-06-18 10:27 281 查看
#include <stdio.h>

int main()
{
int Test0 = 1;	//二进制0001
int Test1 = 2;	//二进制0010

//先来看按位与,直接理解为数学里面的两个集合求交集
//由于Test0和Test1二进制每个位没有交集则结果为0
printf( "%d\n", Test0 & Test1);

//按位或,理解为数学里面的两个集合求并集
//由于Test0和Test1二进制存在不同的二进制位则都保留结果为0011为3
printf( "%d\n", Test0 | Test1);

//按位异或,理解为数学里面两个集合求交集之外的并集
//由于Test0和Test二进制没有相同的位没有交集则直接为求并集结果为3
//如果是13 ^ 6 = 1101 ^ 0110 忽略交集部分为1001 | 0010结果为1011十进制为11
printf( "%d\n", Test0 ^ Test1 );

//按位反,理解为数学求一个集合的补集
//Test0为int32位则二进制为0000 0000 0000 0000 0000 0000 0000 0001
//则Test0的二进制补集为:1111 1111 1111 1111 1111 1111 1111 1110则十进制结果为-2(负数使用补码表示)(无符号int则为0xFFFFFFFF - 1)
printf( "%d\n", ~Test0 );
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息