
位运算
AAS48
一起学算法
展开
-
Leetcode 231. 2 的幂(位运算)
给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true;否则,返回 false。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。2、如果一个数要想为2的幂,必然有 (n & n-1) == 0。这是因为2的幂的数,它减一之后必然所有位(除最高位外)都是1.【思路】:循环的方法就不说了,这里主要提一提位运算的思路。1、如果某个数为负数,那么肯定不是2的幂。代码可以一行搞定了。原创 2022-09-14 12:13:53 · 111 阅读 · 0 评论 -
优秀程序员不得不知道的20个位运算技巧
原文地址:https://blog.youkuaiyun.com/zmazon/article/details/8262185这篇博客总结的特别好,进一步感受到了位运算的奇妙。关于里面有几处不太好理解,这里做一个小结:1.获得int型最大值int getMaxInt(){ return (1 << 31) - 1;//2147483647, 由于优先级关系,括号不可省略...原创 2019-07-29 14:36:56 · 245 阅读 · 0 评论 -
LeetCode: 268. 缺失数字(位运算异或,思路强大)
给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2、示例 2:输入: [9,6,4,2,3,5,7,0,1]输出: 8本题要求时间复杂度为O(n),所以排序啥的可以不用考虑了。【分析过程:】一开始想用二进制位来标记,如果数字x出现了,那我就在sum的第x位加一个1。比...原创 2019-07-29 15:29:09 · 870 阅读 · 0 评论 -
Java位运算知识总结
Java位运算知识主要涉及:1.进制转换。2.有符号数:原码、反码、补码。3.位运算符概述。1.进制转换此部分涉及到进制的概念。二进制、八进制、十六进制与十进制相互转换的方法,比较基础虽然底层都是二进制,但是计算机需要知道你输入的数据要以何种进制来解读。所以Java中以0b开头的是二进制数,以0开头的是八进制数,以0x开头的是16进制数。int x = 0b100; //这样,x的十进制...原创 2019-07-24 20:37:31 · 201 阅读 · 0 评论 -
位运算解析n &= (n - 1)及例题分析
近日在leetcode上做位运算的习题,发现很多人都用到n &= (n - 1)或者n = n & (n - 1)这种写法。一开始看觉得很奇怪,细细分析一下才发现它的奇妙。从具体的数字开始分析。比如当n = 0b1000时,那么这句话做完,n = 0;这个过程是怎么样的呢?我们知道n = 0b1000,那么n - 1 = 0b0111对吧。因此,n & (n - 1)就...原创 2019-07-26 11:46:32 · 1479 阅读 · 0 评论 -
LeetCode:342. 4的幂(位运算)
给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。示例 1:输入: 16输出: true示例 2:输入: 5输出: false和2的幂那一题类似,由于4的幂如,16 = 0b10000, 4 = 0b100,所以4的幂中,也只会出现1个1,并且这个1的位置肯定是在奇数位上。所以可以用简单的循环轻松解决:class Solution { ...原创 2019-07-26 17:05:55 · 192 阅读 · 0 评论 -
int最小值为何是-2147483648,而不是-2147483647
int最小值为何是-2147483648,而不是-2147483647(-int_max)【原文地址】参考博客:作者:雨细泷游来源:优快云原文:https://blog.youkuaiyun.com/weixin_44042017/article/details/86646271首先这是针对int占4个字节的情况。最高位是符号位,1表示是负数,0表示是非负数。0111 1111 1111 ...原创 2019-08-01 14:37:12 · 11878 阅读 · 9 评论