题目描述
思路
先区分正负数,正数,正常二进制,数数即可。
负数,正常二进制的补码(最高位为标记位,1代表负数,剩下位取反后加1)。java中int是4字节,32位,需要注意。
在底层,正负数的确是是以二进制的方式存在的,并且负数就是补码的形式.
&的方式,可以检验出数据中是否含有0,如果有0, 那么返回就是0。
n!=0;那么起码有1个1;
(n - 1) & n;&的方式,可以保留左侧相同的部分留下,右侧数值都是1的。并缩减了比较次数。
Java 1.8
1 | public class Solution { |