C语言题求帮助0 0
若定义unsigneda=31003,b=21103;则表达式啊a^b^b的值为---------------- 答案是31003 于是我想知道a^b...
若定义 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。证毕。
真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。
异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用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。证毕。
展开全部
a^b表示a和按位异或,相同的位为0,不同为1,两个相同的数“异或”为0,任何数与0 “异或”都不变。因此a^b^b的结果仍为a
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
^表示异或,1^0 = 1, 1^1 = 0, 0^0 = 0, 0^1 = 1 ,相同就是0,不同就是1,
31003 的二进制是 111100100011011
21103 的二进制是 101001001101111
a^b 的结果是 010101101110100
a^b^b 的结果是 111100100011011 就是31003
其实 不论a,b是多少,都有 a^b^b = a, a^b^a = b
31003 的二进制是 111100100011011
21103 的二进制是 101001001101111
a^b 的结果是 010101101110100
a^b^b 的结果是 111100100011011 就是31003
其实 不论a,b是多少,都有 a^b^b = a, a^b^a = b
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
^是个移位符号,所以a移动两次就返回原点啊,应该是往右移位
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询