栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

算法学习笔记day1——java位运算

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法学习笔记day1——java位运算

将一个int型数字转换为32bit的二进制数,因为java中的int型占4字节,32比特

如果二进制超过 33 位,不能转化为 Integer
如果二进制超过 65 位,不能转化为 Long
如果二进制超过 500000001 位,不能转化为 BigInteger

  1. Long是引用类型,要比较两个Long的大小,一定要用equals而不能用==

public static void print(int num){
    for(int i = 31; i >= 0; i --){
        System.out.print((num & ( 1 << i )) == 0 ? "0" : "1");
    }
    System.out.println();
}

​​​​​​​2的幂https://leetcode.cn/problems/power-of-two/

二进制中1的个数https://leetcode-cn.com/problems/number-of-1-bits/ 

十进制的相反数相当于对应二进制数取反加一

public class code01 {

    public static void print(int num) {
        for(int i = 31; i >= 0; i--){
            System.out.print((num & (1 << i)) == 0 ? "0" : "1");
        }
        System.out.println();

    }

    public static void main(String[] args) {
        int num = 1;
        print(num);

        int a,b,c;

        //十进制的相反数相当于对应二进制数取反加一
        a = 5;
        System.out.println(a);
        b = -a;
        System.out.println(b);
        c = ~a+1;
        System.out.println(c);


        System.out.println();

        //最小数的相反数是最小数
        a = Integer.MIN_VALUE;
        System.out.println(a);
        b = -a;
        System.out.println(b);
        c = ~a+1;
        System.out.println(c);
    }
}

异或运算:相同为0,不同为1。记为无进位相加。

异或的性质:1、N^N=0        2、N^0=N        3、满足交换率结合律

题目一:如何不用额外变量交换两个数

a = a^b                                        -------> a = a^b        b = b

b = a^b                                        -------> a = a^b        b = (a^b)^b = a

a = a^b                                        -------> a = (a^b)^a = b

题目二:一个数组中有一种数出现了奇数次,其他数都出现偶数次, 怎么找到这种数

[a,a,a,a,b,b,b,c,c]

eof = a^a^a^a^b^b^b^c^c = b​​​​​​​
只出现一次的数https://leetcode.cn/problems/single-number/

题目三:如何找到二进制数a最右侧的1

 a&(-a) 或 a&(~a+1)

题目四:一个数组中有两种数出现了奇数次,其他数都出现了偶数次,怎么找到并打印这两种数

[a,a,a,b,c,c,c,c,d,d]

1、先将全部数据异或,得到 eof = a^b

2、找到 eof 的最右侧1,将全部数据划分为该位为1和该位为0的两部分,a和b肯定分别处于两部分中

3、将两部分分别异或,得到a和b 

只出现一次的数3https://leetcode.cn/problems/single-number-iii/ 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000022.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号