# algorithms **Repository Path**: zhxgxn/algorithms ## Basic Information - **Project Name**: algorithms - **Description**: java实现基础算法及数据结构 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-13 - **Last Updated**: 2025-09-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # algorithms 1、基础数据结构及算法学习 2、通过java实现 3、相关基础源代码阅读 ## 相关资料地址 [基础代码](https://pan.baidu.com/s/15zJL5XXRn3bmGXfxaDQ1rg&pwd=9987) [其它参考](https://www.cxyxiaowu.com/7072.html) [在线数学工具](https://www.desmos.com) [算法复杂度速查表](https://www.bigocheatsheet.com) [编程开发图书](https://gitee.com/jiongmefeishi/JMFS-Programmer-Books) [算法-第四版](https://pan.baidu.com/s/1sevp3o6RQTeRBE9_rbLOEQ?pwd=ohfl#list/path=%2F) (https://book.qq.com/book-read/26211947/9) [gitee图书手册](https://gitee.com/ForthEspada/CS-Books) ## 位运算 - **左移( << )**:操作数的非0位左移n位,低位补0 - **右移( >> )**:操作数的非0位右移n位,高位补0 - **无符号右移( >>> )**:正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行补位 - **位非( ~ )**:操作数为1则为0,否则为1 - **位与( & )**:第一个数和第二个数,都为1则为1,否则为0 - **位或( | )**:第一个数和第二个数,有一个为1则为1,否则为0 - **位异或( ^ )**:第一个数和第二个数,有一个不相同则为1,否则为0 ```java a^a=0; // 自己和自己异或等于0 a^0=a; // 任何数字和0异或还等于他自己 a^b^c=a^c^b; // 异或运算具有交换律 ``` ### 左移( << ) 案例如下: `5<<2=20` 首先会将5转为2进制表示形式(java中,整数默认就是int类型,也就是32位): 0000 0000 0000 0000 0000 0000 0000 0`101` 然后左移2位后,低位补0: 0000 0000 0000 0000 0000 0000 000`101` `00` 换算成10进制为20 ### 右移( >> ) 案例如下: `5>>2=1` 还是先将5转为2进制表示形式: 0000 0000 0000 0000 0000 0000 0000 0`101` 然后右移2位,高位补0 `00`00 0000 0000 0000 0000 0000 0000 000`1` ### 无符号右移( >>> ) 我们知道在Java中int类型占32位,可以表示一个正数,也可以表示一个负数。正数换算成二进制后的最高位为0,负数的二进制最高为为1。**正数右移,高位用0补,负数右移,高位用1补,当负数使用无符号右移时,用0进行补位**。 案例如下: `5>>3=0` `-5>>-1` `-5>>>536870911` 我们来看看它的移位过程(可以通过其结果换算成二进制进行对比): 5换算成二进制: 0000 0000 0000 0000 0000 0000 0000 0101 5右移3位后结果为0,0的二进制为: 0000 0000 0000 0000 0000 0000 0000 0000 // (用0进行补位) -5换算成二进制: 1111 1111 1111 1111 1111 1111 1111 1011 -5右移3位后结果为-1,-1的二进制为: 1111 1111 1111 1111 1111 1111 1111 1111 // (用1进行补位) -5无符号右移3位后的结果 536870911 换算成二进制: 0001 1111 1111 1111 1111 1111 1111 1111 // (用0进行补位) ### 位非( ~ ) 操作数的第n位为1,那么结果的第n位为0,反之。 案例如下: `~5=-6` 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 -6转换为二进制:1111 1111 1111 1111 1111 1111 1111 1010 ### 位与( & ) **都为1则为1,否则为0**。第一个操作数的第n位于第二个操作数的第n位如果都是1,那么结果的第n为也为1,否则为0。 案例如下: `5&3=1` 将2个操作数和结果都转换为二进制进行比较: 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0`101` 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0`011` 1转换为二进制:0000 0000 0000 0000 0000 0000 0000 0`001` ### 位或( | ) 第一个操作数的的第n位于第二个操作数的第n位 只要有一个是1,那么结果的第n为也为1,否则为0。 案例如下: `5|3=7` 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 7转换为二进制:0000 0000 0000 0000 0000 0000 0000 0111 ### 位异或( ^ ) 第一个操作数的的第n位于第二个操作数的第n位 相反,那么结果的第n为也为1,否则为0。 `a^0=a` 案例如下: `5^3=6` 5转换为二进制:0000 0000 0000 0000 0000 0000 0000 0101 3转换为二进制:0000 0000 0000 0000 0000 0000 0000 0011 6转换为二进制:0000 0000 0000 0000 0000 0000 0000 0110 ### 衍生 由位运算操作符衍生而来的有: `&=` 按位与赋值 `|=` 按位或赋值 `^=` 按位非赋值 `>>=` 右移赋值 `>>=` 无符号右移赋值 `<<=` 赋值左移 和 += 一个概念而已。 #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)