欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > (简单题 位运算)leetcode 10009

(简单题 位运算)leetcode 10009

2025/4/3 6:28:35 来源:https://blog.csdn.net/2403_87140725/article/details/146703776  浏览:    关键词:(简单题 位运算)leetcode 10009

异或运算完成指定有效位取反(注意 带符号整数都是32位每位都会判断不能直接~)

如5:000000……0101

7

和:0000……0111异或

得到000……0 010=2

而且

若n二进制最高位1是第i位则n一定小于第2的i+1

我们找到i的位置,用(1<<i+1)-1和n异或就行

(或者找到第一个大于n的2的i次幂,再用其-1进行异或)

特殊情况

n==0时

我们i要是从0开始判断 1<<0,导致0^0=0

我们i从1开始算或者if(n==0)return 1;

注意区分i是n的有效位数还是有效位数加1

特殊情况n==30

这个只能用1<<31-1进行与运算也就是INT_MAX

2^31不存在溢出

class Solution {
public:int bitwiseComplement(int n) {int i =1;while (i <= 30){if (n <(1 << i))break;i++;}
int len=i-1;int mask = (len == 30 ? INT_MAX: (1 << (i)) - 1);//判断有效位数长度是不是30return n ^ mask;
}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词