leetcode476. Number Complement
来源:互联网 发布:mac 改桌面图标大小 编辑:程序博客网 时间:2024/05/16 09:10
Input: 5Output: 2Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
一:知识补充
java中取反 是会看第一位是符号位 如果是1就会转为负数 我不想要这样的结果 就是把它当成无符号
如~12 // -13 ,解释如下。
首先,你要知道java中的int是32位的
其次,正数以原码的形式存储,负数以补码的形式存储
12的二进制是0000 0000 0000 0000 0000 0000 0000 1100
取反后得1111 1111 1111 1111 1111 1111 1111 0011
java中都是有符号数,首位是1,所以是负数,负数也就是补码,也就是说
1111 1111 1111 1111 1111 1111 1111 0011是补码
补码,反码加1后得源码
转换成源码得0000 0000 0000 0000 0000 0000 0000 1101
这个数是13,加上符号就是-13
二:知识补充
Integer.highestOneBit(num) 方法找出最高位,这个函数的作用是取num这个数的二进制形式最左边的最高一位且高位后面全部补零,最后返回int型的结果。
- 如果一个数是0, 则返回0;
- 如果是负数, 则返回 -2147483648:【1000,0000,0000,0000,0000,0000,0000,0000】(二进制表示的数);
- 如果是正数, 返回的则是跟它最靠近的比它小的2的N次方
比如 17:
二进制是【0000,0000,0000,0000,0000,0000,0001,0001】
highestOneBit(17)返回的是最高位的1个1, 其它全是0 的二进制数:【0000,0000,0000,0000,0000,0000,0001,0000】,其实就是16。
三:求解方法
1.首先对整形数num按位取反,~num。这个操作后,我们需要判断有效位的个数。
2.采用Integer.highestOneBit(num) 方法找出最高位。
这个函数的作用是取num这个数的二进制形式最左边的最高一位且高位后面全部补零,最后返回int型的结果。
3.左移后-1,这样有效位全部被赋予1。
4.与~num进行位与操作。
由于有效位的最高位的相反值一定是0,所以左移一位没有必要。最终结果:
return ~num & (Integer.highestOneBit(num) - 1);
Tip:10000000这个二进制-1之后,就是01111111
四:补充解法
100110, its complement is 011001, the sum is 111111.
然后直接计算111111的值,然后用111111-100110
这个方法不是很好,没有用到位运算的知识。
- leetcode476: Number Complement
- leetcode476. Number Complement
- leetcode476. Number Complement
- Leetcode476. Number Complement
- leetcode476. Number Complement
- python--leetcode476. Number Complement
- 13.leetCode476:Number Complement
- LeetCode476. Number Complement位操作面试题
- Number Complement
- Number Complement
- Number Complement
- Number Complement
- Number Complement
- Number Complement
- Number Complement
- Number Complement
- Number Complement
- Number Complement
- 程序员3年之痒——改变不止薪水
- 使用Python抽取PDF文件内容,包括文本、图像、线条等对象
- python网络系列之二(显现request )
- Eureka中的核心概念
- egl.chooseconfig
- leetcode476. Number Complement
- IOS第三方开源项目
- Re库基本用法
- 用户故事地图编写方法
- 微擎 -- 模块安装,新老版本版权保护问题解决方法
- svm以及各种版本的实现
- DOM节点
- php中的error_reporting错误级别
- python多线程,so easy