1)在1到n的数字中,有且仅有m这个数字重复出现了,其他数字有且仅出现一次,找到这个m。
答案:可以考虑异或运算。
原始数据:1,2,...,m,m,....n
比较数据:1,2,3,...,n
a=原始数据的异或 即 1^2^....^n^m
b=比较数据的异或 即 1^2^...^n
x=a^b=(1^2^...^n)^(1^2^...^n)^m=0^m=m
2) 交换的另一种方式
x与y交换,正常是通过一个中间量保存.
可以直接: x=x^y,
y=x^y, x^y^y=x^0=x
x=x^y, x^y^x=y^0=y
这样无需中间量即可完成交换.
3)反码
i-j=i+(-j)=i+2^n+(-j)=i+(2^n-i-j)+1=i+j的反码+1=i+j的补码
如果x为符号位是1的补码,则x的绝对值是出去符号位的部分取反,再加1.
比如 反码为:10100010 此数是负数,绝对值为除去符号位的部分0100010 取反,即1011101,再加1 为 1011110 数值是94,所以此补码表示的是-94.
当然针对符号位为负的补码,也可以对补码减1再对除符号为取反