3
赞
你的效率很低。
而且思路有问题。
你用antibin存2进制的数据。但是只有一个内存,当处理完x要比较y的时候缓冲区内容已经改变了
最后用*addr1 == *addr2 的时候两个地址其实是一样的。
int a = transfer(x)+i;
int b = transfer(y)+i
你在比较a,b 试试。
而且你辛辛苦苦算的x的二进制在下一次循环的时候还要再算一次。。。
而且你算的是31位 正常应该算32位
如果不用异或直接计算应该用类似下面的逻辑
while(x>0 || y>0){ //只支持正整数 x,y => unsigned int, 一直循环到都是0
if( x&1!=y&1) cnt++; // or x%2!=y%2
x>>1; //右移一位。 如果到0右移仍然是0
y>>1;
}
而且思路有问题。
你用antibin存2进制的数据。但是只有一个内存,当处理完x要比较y的时候缓冲区内容已经改变了
最后用*addr1 == *addr2 的时候两个地址其实是一样的。
int a = transfer(x)+i;
int b = transfer(y)+i
你在比较a,b 试试。
而且你辛辛苦苦算的x的二进制在下一次循环的时候还要再算一次。。。
而且你算的是31位 正常应该算32位
如果不用异或直接计算应该用类似下面的逻辑
while(x>0 || y>0){ //只支持正整数 x,y => unsigned int, 一直循环到都是0
if( x&1!=y&1) cnt++; // or x%2!=y%2
x>>1; //右移一位。 如果到0右移仍然是0
y>>1;
}