早教吧 育儿知识 作业答案 考试题库 百科 知识分享

C语言题求帮助00若定义unsigneda=31003,b=21103;则表达式啊a^b^b的值为----------------答案是31003于是我想知道a^b^b是什么意思为什么=31003

题目详情
C语言题求帮助0 0
若定义 unsigned a=31003,b=21103;则表达式啊a^b^b的值为---------------- 答案是31003 于是 我想知道a^b^b是什么意思 为什么=31003
▼优质解答
答案和解析
^ 表示读数据进行按位异或,异或运算法则为:
真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假.就是说两个值不相同,则异或结果为真.反之,为假.
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0异或0=0,1异或0=1,0异或1=1,1异或1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位.
a^b^b= a ^ (b ^ b) = (a ^ b) ^b; 这是异或的运算法则.
a = 111 1001 0001 1011
b = 101 0010 0110 1111
异或得:010 1011 0111 0100
b = 101 0010 0110 1111
再次异或 111 1001 0001 1011 即与a相同,所以是31003.
可以得出以下结论,一个数与同一个数2次异或结果不变.
可以证明:
1^0=1 1^0=1,两次运算后还是1
0^0=0 0^0=0,两次运算后还是0
1^1=0 0^1=1,两次运算后还是1
0^1=1 1^1=0,两次运算后还是0.证毕.