首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教这个异或运算的原理是什么

2013-08-14 
请问这个异或运算的原理是什么#include stdio.hint main(void){unsigned int a,bunsigned int mask 1

请问这个异或运算的原理是什么

#include <stdio.h>

int main(void)
{
unsigned int a,b;
unsigned int mask = 1U << 6;
a = 0x12345678;
b = a^mask; /*flip the 6th bit*/ //为什么这里可以将第6位反转呢。
printf("%d\n",mask);
printf("%d\n",b);
}

[解决办法]
exclusive or true table
[解决办法]

两个值不相同,则异或结果为真。反之,为假。 不同为1,相同为0.

[解决办法]
异或运算,相等的为0,不等为1。
mask除了第6位是1,其余都是0,所以a中除了第6位,其余原来是1的,异或0还是1,原来是0的,异或0还是0
mask第6位是1,所以a的第6位,如果是1,异或1是0,如果是0,异或1是1,这样完成第6位反转。
[解决办法]
引用:
exclusive or true table

你的例子中: B为1,如果A为1则输出0, 如果A是0,则输入1。 也就是把A翻转。
[解决办法]
unsigned int mask = 1U << 6;

为什么要写成1U呢?求指导  

1<<6 或者 0x1<<6不行吗 ?

热点排行