位操作
wdkirchhoff
这个作者很懒,什么都没留下…
展开
-
九度OJ 1351 数组中只出现一次的数字 (位操作)
题目1351:数组中只出现一次的数字时间限制:1 秒内存限制:32 兆特殊判题:否提交:2597解决:766题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。输入:每个测试案例包括两行:第一行包含一个整数n,表示数组大小。2第二行包含n个整数,表示数组元素,元素均原创 2014-12-20 10:47:14 · 3296 阅读 · 0 评论 -
数组中只出现1次的两个数字(百度面试题)
首先来看题目要求:在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。 考虑下这个题目的简化版——数组中除一个数字只出现1次外,其它数字都成对出现,要求尽快找出这个数字。这个题目在之前的《位操作基础篇之位操作全面总结》中的“位操作趣味应用”中就已经给出解答了。根据异或运算的特点,直接异或一次就可以找出这个数字。 现在数组中有两个数转载 2014-12-12 11:59:53 · 626 阅读 · 0 评论 -
位操作 注意事项
1.位操作符的运算优先级比较低,因此尽量使用括号来确保运算顺序,否则很可能会得到莫明其妙的结果。比如要得到像1,3,5,9这些2^i+1的数字。写成int a = 1 2.奇偶判断for (i = 0; i < 100; ++i)//输出0~100内所有奇数 if (i & 1) printf("%d ", i);putchar('\n');3.不用第三方变量交换两数原创 2014-12-12 11:51:54 · 675 阅读 · 0 评论 -
写一个函数,判断一个int型的正整数是否是2的幂,即是否可以表示成2^X的形式(不可以用循环)
原文链接参考答案://只考虑a大于0的情形//返回1,表示a为2的幂//返回0, 表示a不是2的幂int is2n(int a){ return (((~a + 1) & a) == a);}例如: 1.对于整数8,判断过程如下: 二进制 : 1000 ~a转载 2015-01-02 20:04:50 · 2982 阅读 · 0 评论