![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
位运算
文章平均质量分 70
雅丶傲天凝影
这个作者很懒,什么都没留下…
展开
-
位运算chapter4:掩码法---位分治原地逆置二进制表达式
这里没有掩码,因为我们直接做一次16位的大交换:将原数的前16位移动到后16位的位置,将后16位移动到前16位的位置。组合这些步骤,我们逐渐扩大了交换比特位的间隔距离,从最原始的相邻位一直到16位块,实现了一个完整的32位二进制数的位翻转。,我们将所有偶数位向左移动1位,填充到奇数位的位置。这一步中,我们交换每隔1位的比特位,也就是说,我们现在操作每一对位中的每4个位。在这里,我们转而交换每隔3位的比特位,即我们操作每8位内的比特位。,将每组4位内的后2位移动到原来前2位的位置,从而实现位的交换。原创 2024-02-25 16:43:31 · 435 阅读 · 0 评论 -
位运算chapter3:判断是否是2的幂的幂------构造掩码法
这个掩码的构造思路也十分简单,首先找到二的幂的这个数的二进制表达式,比如说32,是100000,然后-2,得到11110,最后把它反复拼接(从11110变成1111011110以此类推),并删去超过数据类型的部分。是2的幂,然后检查1是否在奇数位上,因为4的任何幂的二进制表示将只有一个1,并且1出现在偶数位置上。,用一个特定的掩码来检查1的位置是否符合2的幂的幂的规则。这个掩码里的‘1’是用来屏蔽非2的幂的幂的位置的。同理,16的幂验证,确保1出现在4的倍数的位置上。brian kernighan算法。原创 2024-02-25 14:55:32 · 775 阅读 · 0 评论 -
位运算chapter2+½:有效位同或(异或非)运算的实现
注意,这里并不能直接写成~(n^m)因为这样会改变符号位,并且把二进制位中的前置0都变成1。原理很简单,就是用n^m的结果再次异或所有位都是1的一个二进制数。虽然C++中没有直接提供"同或"运算符,而这里的前置0显然不是有效位。下面以Eqv(22, 27)原创 2024-02-24 23:39:03 · 253 阅读 · 0 评论 -
位运算chapter2:求[left,right]所有自然数的与运算
这样我们便得到了剩余的二进制位的 AND 结果,即公共前缀后跟上对应数量的0。并控制条件当left>=right时循环终止,可以实现求left和right的公共前缀所代表的数。通过brian kernighan算法来实现不断地把right的二进制表达式中的最右侧的1删去。之间的数都会影响最终的 AND 操作结果,所以当两者相等,我们确保了它们的公共前缀(即。然后对其取反,原本是1的位置全都变成了0,并且刚好对应left和right的所有非公共位。,记录left和right的非公共部分的位数。原创 2024-02-24 23:11:54 · 1015 阅读 · 0 评论 -
位运算chapter1+⅔:与运算‘&’提升---Brian Kernighan算法
n & (-n)这个操作用来获取一个数 (n) 在二进制表示下最低位的1,和它的位位置。在二进制系统中,负数通常以补码(two’s complement)的形式存储。对应的算式是-n=~n+1。因此,当你做 n & (-n)时,实际上你将 n 和 n 的补码进行位与操作。这个操作的效果是,所有 n 最低位1以上的位都会被设置为0,因为 n 和 -n 在这些位置上数值相反。原创 2024-02-23 18:49:45 · 659 阅读 · 1 评论 -
位运算chapter1+⅓:全1函数与其实例
而浮点运算更复杂,涉及到位表示的解析、指数和尾数的运算等,因此,尽管从时间复杂度上来说使用log2的实现略胜一筹,但实际情况下,这个实现的性能可能与单纯使用位运算的实现平分秋色。以此类推,每一次都会复制一次原先的1到后面的位上,而一个数的二进制位数一共是logn个。①n不是2的幂,n--不会改变这个数的二进制位数,所以经过全1化之后,n会变成。②n是2的幂,结果就是n本身,n--先降位,然后全一化n会变成。,然后再加1就得到大于等于n的最小的2的幂。因此,这个算法的时间复杂度是以2为底的。原创 2024-02-23 16:50:23 · 243 阅读 · 1 评论 -
位运算chapter1:无if,else,switch,?:实现求两数较大/小者
这里只详细解释这句话的用途:bitset returnB = diffAB & sa | sameAB & sc;因此,有了这句话 bitset returnB = diffAB & sa | sameAB & sc;但是不足的地方是这个算法无法处理unsigned类型的情况,也就是无符号类型的情况。当AB同号是,如果C是负数,那么等价A-B原创 2024-02-22 23:59:32 · 157 阅读 · 1 评论 -
位运算chapter0:简介二进制表达式与位运算
从0开始学位运算,感受底层的魅力原创 2024-02-22 23:14:11 · 630 阅读 · 0 评论