感谢楼主,终于把第一题想明白了,首先, 先考虑二进制位为1的情况,比如100---1100100,要将其转换为31位全为1,x^a ^b, 必须保证x为1的位出现1的次数为奇数,只能是1^1^1或1^0^0, 每个x为1的位有两种情况;然后考虑其他位,使得|a-b|最小,那么不管x是多少,其他剩余的位都为0,所以a和b的位必定相反,a-b最小只有一种情况,因此该位!a = b, a为1b为0或者a为0b为1,最后的结果是: (1 >> num(1的个数) )  >> 1, 然后需要考虑INT_MAX和INT_MIN,如果是这两个数方案除2