【程序员面试金典】面试题 05.06. 整数转换

【程序员面试金典】面试题 05.06. 整数转换

    • 题目描述
    • 解题思路

题目描述

描述:整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。

输入:A = 29 (或者0b11101), B = 15(或者0b01111)
 输出:2
输入:A = 1,B = 2
 输出:2

解题思路

思路1:最直观的想法是,利用异或运算和与运算来判断整数A和整数B的二进制位数不同的个数。首先将整数A和整数B的异或结果存储在C中,然后从低位到高位开始遍历,判断C与1的与运算结果是否为1,如果是则将不同个数res加一,每次运算后需要将C右移一位以方便下一轮的运算,注意是将C右移一位,而不是将1右移i位喔!

int convertInteger(int A, int B) 
{
    //C是A与B的异或结果
    int C=A^B;
    int res=0;
    for(int i=0;i<32;i++)
    {
       //只利用1的最右边
       if(C&1==1)
         res++;
       //将C右移一位
       C>>=1;
    }
    return res;
}

总结:[-2147483648, 2147483647]之间指的是32位二进制数。

你可能感兴趣的:(程序员面试金典,面试,职场和发展)