位操作
wdkirchhoff
这个作者很懒,什么都没留下…
展开
-
九度OJ 1351 数组中只出现一次的数字 (位操作)
题目1351:数组中只出现一次的数字 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2597 解决:766 题目描述:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 输入: 每个测试案例包括两行: 第一行包含一个整数n,表示数组大小。2 第二行包含n个整数,表示数组元素,元素均原创 2014-12-20 10:47:14 · 3311 阅读 · 0 评论 -
数组中只出现1次的两个数字(百度面试题)
首先来看题目要求: 在一个数组中除两个数字只出现1次外,其它数字都出现了2次, 要求尽快找出这两个数字。 考虑下这个题目的简化版——数组中除一个数字只出现1次外,其它数字都成对出现,要求尽快找出这个数字。这个题目在之前的《位操作基础篇之位操作全面总结》中的“位操作趣味应用”中就已经给出解答了。根据异或运算的特点,直接异或一次就可以找出这个数字。 现在数组中有两个数转载 2014-12-12 11:59:53 · 641 阅读 · 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 · 685 阅读 · 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 · 2998 阅读 · 0 评论