第三周作业:位运算

    xiaoxiao2021-03-25  116

    题目:Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.

    Note:

    The given integer is guaranteed to fit within the range of a 32-bit signed integer.You could assume no leading zero bit in the integer’s binary representation.

    题解:题意是将一个数变成其二进制数,然后将其位为0变为1,位为1变为0,然后将其输出。例如5位101,变为010,则输出2,联想到010=111-101(异或也行).即可变为求任何数变为二进制数并将其位为0的全部变为1,有两种方法,一种是逐位or 1,或者是考虑111=1000-1,下面用代码体现。

    代码1:

    class Solution { public: int findComplement(int num) { int i; int c=num; bool start=false; for(i=31;i>=0;i--) { if(c&(1<<i)) start=true; if(start) c=c|(1<<i); } return (c-num); } };代码2: class Solution { public: int findComplement(int num) { int mask=1; int c=num; while(c){ c>>=1; mask<<=1; } return ((mask-1)^num); } };

    转载请注明原文地址: https://ju.6miu.com/read-19930.html

    最新回复(0)