按位运算符是把操作数看作一系列单独的位,而不是一个数字值。所以在这之前,不得不提到什么是“位”:数值或字符在内存内都是被存储为0和1的序列,每个0和1被称之为1个位,比如说10进制数据2在计算机内被存储为 0 0 0 0 0 0 1 0,当我们将内存内的位值改变之后,这个值代表的意义也就变了,比如把...
分类:
Web程序 时间:
2014-12-01 12:37:03
阅读次数:
241
位运算加速技巧1.如果乘上一个2的倍数数值,可以改用左移运算(Left Shift) 加速 300%x = x * 2;x = x * 64;//改为:x = x > 1;// 2 = 21x = x >> 6;// 64 = 263.数值转整数加速 10%x = int(1.232)//改为:x ...
分类:
编程语言 时间:
2014-11-30 13:57:17
阅读次数:
92
题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字,要求:时间复杂度为O(n),空间复杂度O(1) 测试样例:输入: 8 {2,4,3,6,3,2,5,5}输出: 4,6 解法: 使用异或解决问题:一个数异或自己等于0,异或其他数 != 0,如果是一个数字,那么一趟遍历数组异或之后的结果就是我们要的;而现在是2个数据,那...
分类:
编程语言 时间:
2014-11-30 12:34:46
阅读次数:
165
/*1、用位操作实现无符号整数的乘法运算,函数原型是unsigned int multiply(unsigned int x, unsigned int y);。例如:(11011)2×(10010)2=((11011)2unsigned int multiply(unsigned int a,un...
分类:
编程语言 时间:
2014-11-29 21:41:32
阅读次数:
230
题目大意:给你一个数N,输出N的二进制形式上为1的数位(从右至左)
思路:每次(N&1)判断末尾是否为1,为1则存入数组ans[]中,不为1则
不存,之后数位自增,N向右移一位,继续判断末尾……...
分类:
其他好文 时间:
2014-11-27 00:22:28
阅读次数:
288
Implement pow(x,n).思路:像string to integer一样。考虑的细节较多。 1.测试用例要考虑基数和指数都为正数、负数和零的情况。 2.注意0的0次方在数学上没有意义。 3.用位运算代替乘除和求余优化效率:移位代替除法(n>>1 == n /2);用位与代替求...
分类:
其他好文 时间:
2014-11-26 22:15:49
阅读次数:
182
1 操作符表达式由操作数和操作符组成2 算术表达式+ - * / %3 自增和自减表达式++ --4 位运算表达式对数据按二进制位进行运算&与、|或、^异或 `取补 >右移5 赋值表达式= += -= *= /= %= &= |= ^= >=6 关系表达式== != = is7 条件逻辑表达式&&....
分类:
其他好文 时间:
2014-11-26 01:06:33
阅读次数:
230
题目链接:传送门
题意:求[1,n]内与m互质的个数。
容斥原理:奇加偶减(奇数个类的计数和-偶数个类的计数和)
对于这个问题,首先求出m的质因数fac[] , 然后所在区间内有n/fac[i]个数 一定不能与m互质(比如m=8,n=10,对于fac[]=2,有2,4,6,8,10 即5(10/2)个数不能与8互质)。。枚举每一个质因数选还是不选。可以位运算,也可以dfs
第一发容斥,准...
分类:
其他好文 时间:
2014-11-25 23:31:14
阅读次数:
282
研究这个的起因是我遇到一个题目,判断一个数是奇偶数,这个很简单,但是又个最佳代码 判断奇偶时用了#includeint main(){ int n;scanf("%d",&n);printf("%s",n&1?"odd":"even");} 这里用&运算,从而判断二进制数的最后一位是否为当n的最后....
分类:
其他好文 时间:
2014-11-23 21:33:59
阅读次数:
335
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2095解题思路:因为只有我们要求的那个数出现的次数为奇数,所以可以用位运算来做,两次异或同一个数最后结果不变,那么就可以知道异或运算相当于过滤掉了出现次数为偶数的数,最后只留下了唯一的那一个出现次数为奇数...
分类:
其他好文 时间:
2014-11-20 23:23:25
阅读次数:
222