前言
大家好,我是春风。
因为之前对于数据结构与算法,都是零零散散的学习,学完之后,发现自己掌握的也不牢靠,所以从今天开始,准备完整的系统性的学习数据结构与算法。(所看视频:左神的数据结构与算法课程)
算法追求的就是解决问题的效率,要效率高,就一定要先了解位运算!
一、Java中的int
打印int的二进制数:
我们知道Java中int型整数在二进制中是32位,那怎么打印我们这个32位的二进制整数呢?
解:循环32次,每次将1左移i位,然后与上整数本身。
整型的范围:
无符号整数的最大值是:2^32 - 1
我们知道有符号整数的范围是-2^31 ~ 2^31-1,怎么来的?
有符号整数,也就是我们Java中的int,最高位0、1表示符号,1就是负数,0就是非负数。
那最大值就是0 ~ 30这31个位置都是1,也就是2^31 - 1。
而int中的负数用32位二进制表示比较特殊:除了第32位上用1来表示符号负数外,剩下的31个位置上,取反+1才是最终那个负数,所以-1就是32位全部为1(除符号位其他全部取反就为0,然后+1)
而最小值,就是0~30位全部为0,取反后全为1,然后+1,也就是-2^31
为什么负数要做成取反&#