数字的补数
数字的补数
一、题目描述
对于一个整数的二进制取反,再转换为十进制数,得到的这个数就是这个整数的补数。
示例1
输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。
示例2
输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。
二、解题思路
题目要求是将二进制中的数字,将0转为1,1再转为0。可以想到让原来的整数,与一个都为1的二进制数做一个位运算。即可得到答案。
三、解题方法
方法1(位运算)
将所给的整数num与一个全为1的二进制做位运算。这里有一个问题,布num的位数再32位之内。需要确定一个和num位数相同的全位1的二进制。
代码实现
class Solution {
public int findComplement(int num) {
int temp =1;
int num1 = num;
while( num1 >1){
num1/=2;
temp = (temp<<1)+1;
}
return num ^ temp;
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)