美文网首页
数字的补数

数字的补数

作者: xialu | 来源:发表于2021-10-17 23:04 被阅读0次

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/number-complement

    题目描述:

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

    示例 1:

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

    示例 2:

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

    思路:
    • 求出最高位1的位置,和一个从该位开始全是1的数异或即可。
    • 例如:110 100 001,最高位第8位为1,则和111 111 111异或即可。
    代码实现:
    class Solution {
        // 最高位1的索引.
        public int bit_num = 1;
        public int findComplement(int num) {
            int idx = num;
            int mark = 0;
            while (mark < 32) {
                if ((idx >> mark) == 0) break;
                if (((idx >> mark) & 1) != 0) {
                    bit_num = mark;
                }
                mark++;
            }
            // 最高位上一位为1的值
            bit_num = 1 << (bit_num + 1);
            return num ^ (bit_num - 1);
        }
    }
    

    相关文章

      网友评论

          本文标题:数字的补数

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