NC144. 懂二进制
描述
世界上有10种人,一种懂二进制,一种不懂。那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?示例1
输入:
3,5
输出:
2
说明:
3的二进制为11,5的二进制为101,总共有2位不同示例2
输入:
1999,2299
输出:
7
C++ 解法, 执行用时: 2ms, 内存消耗: 468KB, 提交时间: 2022-04-17
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param m int整型 * @param n int整型 * @return int整型 */ int countBitDiff(int m, int n) { int t = m ^ n; int count = 0; while(t){ t = t & (t - 1); count++; } return count; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-26
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param m int整型 * @param n int整型 * @return int整型 */ int countBitDiff(int m, int n) { // write code here int r = m^n; int res = 0; while(r){ if(r & 1) res++; r = r >> 1; } return res; } };
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-25
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param m int整型 * @param n int整型 * @return int整型 */ int countBitDiff(int m, int n) { // write code here int res=m^n; int ad=1; int ans=res&ad; for (int i=1;i<32;++i){ ad=ad<<1; ans+=(res&ad)>0; } return ans; } };
C 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-06-03
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param m int整型 * @param n int整型 * @return int整型 * * C语言声明定义全局变量请加上static,防止重复定义 */ int countBitDiff(int m, int n ) { //一个二进制数和1相与,就可以知道这个二进制数的最后一位是1还是0 //右移一位=在左边添0(无符号数添0,有符号数添符号位) int cnt=0;//二进制位有多少位不同 for(int i=0;i<32;i++) { if((m>>i&1)!=(n>>i&1)) cnt++; //右移i位,一位一位比较是否相同 } return cnt; }
C++ 解法, 执行用时: 3ms, 内存消耗: 396KB, 提交时间: 2022-04-05
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param m int整型 * @param n int整型 * @return int整型 */ int countBitDiff(int m, int n) { // write code here int r = m ^ n; int res = 0; while(r) { r &= (r - 1); res++; } return res; } };