位操作问题
moses1213
积跬步,至千里;积小流,成江海!
展开
-
C++位操作总结
总结一下位操作常用的几个技巧:1.获取判断某位是否是否为1.bool GetBit(int num, int i){ return ((num & (1 << i)) != 0);} 2.置位将某一位置为1。int SetBit(int num, int i){ return num | (1 << i);}3.清零将第某几位置为0。//第i位清原创 2016-07-29 20:00:43 · 633 阅读 · 0 评论 -
交换整数的奇数位和偶数位
题目:编写程序,交换某个整数的奇数位和偶数位,使用指令越少越好。解法:这道题目解法有很多,比较简单的方法就是提取奇数位右移一位,再提取偶数位左移一位,这样正好错位,最后”位或“就可以了。提取奇数位可以用10101010这样的二进制数,提取偶数位用01010101。int SwapOddEvenBits(int num){ return ((num & 0xaaaaaaaa) >> 1)原创 2016-07-29 20:43:10 · 594 阅读 · 0 评论 -
位操作求余数
在一些位操作里可能需要求余数的操作,而且位操作执行效率更高,但除数为2的N次方时,位操作也是一种实现方式。总结了两种方法如下:1:MOD(X, M) = X - (X >> M) 2:MOD(X, M) = X&(M-1) //M必须是2的N次方其实方法1就是低位置零的方法,也可以这样实现:假设M = 2^n, X & (~(1原创 2016-08-12 12:34:03 · 1772 阅读 · 0 评论 -
内存限制下查找数组的重复数
题目:给定一个数组,包含1到n的整数,n最大为32000,数组可能含有重复的值,且n的取值不定。若只有4KB的内存可用,该如果打印数组中所有重复的元素?思路:检测重复数的题目做过很多了,通常是建议一个哈希表,对访问过的元素进行标记,当访问的元素未标记时,标记这一元素,如果已经标记,说明重复,输出。哈希表可以用数组实现,假设申请int型的大小为32000的数组,那么使用的空间大小为32000*4原创 2016-08-12 17:14:15 · 646 阅读 · 0 评论