美文网首页
476. 数字的补数

476. 数字的补数

作者: SunSeaSky | 来源:发表于2018-05-25 17:10 被阅读0次

    给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。

    注意:

    给定的整数保证在32位带符号整数的范围内。

    你可以假定二进制数不包含前导零位。

    示例 1:

    输入:

    5

    输出:

    2

    解释:5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。

    示例 2:

    输入:

    1

    输出:

    0

    解释:1的二进制表示为1(没有前导零位),其补数为0。所以你需要输出0。

    思路:考察数字的位操作,需要使用位移操作、位运算来求解,设立一个标志位,从最高位开始查找第一个不为0的位置

    找到后进行按位取反操作,即和1进行异或操作即为取反。

    class Solution {

        public int findComplement(int num) {

            boolean flag = false;

            for (int i = 31; i >= 0; i--) {

                 if ((num & (1 << i)) != 0)

                     flag = true;

                  if (flag)

                     num ^= (1 << i);

            }

            return num;

        }

    }

    相关文章

      网友评论

          本文标题:476. 数字的补数

          本文链接:https://www.haomeiwen.com/subject/bgsujftx.html