逻辑移位:移位所缺少的数字用“0”来填充
算术移位:移位所缺少的数字用符号位来填充
第一题、题解:如何找数组中唯一成对的那个数
异或能消除重复的数,重复的数出现偶数次,将已知的数和数组中所有的数都取异或就得到为出现奇数次的数
第二题、找出落单的数,这样编程就对了
直接全部的数异或
第三题、一题三解:计算二进制中1的个数
1、数不变,与之异或的数移动
2、数移动与1异或
3、x&(x-1)每次消去一个1,直至x为0结束
第四题、一条语句判断整数是不是2的整数次方
x&(x-1)只进行一次
第五题、位运算思维:将整数的奇偶位互换
整数先与0x55555555取奇数位,与0xaaaaaaaa去偶数位,奇数位左移一位,偶数位右移一位,求异或
第六题、乘2挪整:二进制表示浮点实数
一般解法
第七题、编程实践:出现k次与出现1次
k进制不进位加法,先转换为相应的的进制,然后累加,去最终值
#include<iostream>
using namespace std;
int N=10;
int result;
int arr[]={232,232,232,111,111,111,2,3434,3434,3434,3434};
int num[32];
int main()
{
for(int i=0;i<N;i++)
{
int j=0;
while(arr[i]!=0)
{
num[j]+=arr[i]%3;
arr[i]/=3;
num[j]%=3;
j++;
}
}
for(int i=32;i>=0;i--)
{
result=result*3+num[i];
}
cout<<result;
return 0;
}