深圳做自适应网站公司,wordpress 百家号,个人主页网址怎么写,大型网站系统解决方案思路#xff1a;
牵扯到二进制数#xff0c;基本上要考虑位运算符#xff0c;相关知识可以见http://t.csdnimg.cn/fzts7
之前做过类似的题目#xff0c;大致思路就是先用按位异或^找出不同位#xff0c;再用n#xff08;n-1#xff09;计算出不同位的个数#x…
思路
牵扯到二进制数基本上要考虑位运算符相关知识可以见http://t.csdnimg.cn/fzts7
之前做过类似的题目大致思路就是先用按位异或^找出不同位再用nn-1计算出不同位的个数但是这道题有个小坑就是极限了话n刚好为int类型的最小值即二进制数为1000……0000此时n-1就会溢出。
就是A和B的二进制数刚好是1000……0000和0000……0000此时nA^B就是1000……0000所以此时n再减1就溢出了因此我们要考虑这个特殊情况
INT_MIN 代表int类型的最小值即-2147483648
INT_MAX 代表int类型的最大值即2147483647
定义INT_MIN 只能 INT_MIN ( - INT_MAX) - 1
而不能 INT_MIN - ( INT_MAX 1) 因为这样就溢出最大值了
其头文件为#includelimits.h
int convertInteger(int A, int B)
{int count0;int nA^B;while(n){if(nINT_MIN) //如果是最小值{count; break;}nn(n-1); //减去一个1的个数count; }return count;
}