当x有奇数个1时返回1,retrun 1 when x contains an odd number of 1s
来源:互联网 发布:淘宝店铺旺铺专业版 编辑:程序博客网 时间:2024/04/28 21:55
看到了这一个练习题,写一个函数,要求当x有奇数个1时返回1,否则返回0,只能用12个以内的逻辑、算术和位运算
/* retrun 1 when x contains an odd number of 1s;0 otherwise
Assume w=32*/
看到这道题时,想到笨一点的方法就是一个个去数吧,if(x&0x1==0){ k++;} 循环后将k取模得到结果,但这样不符规定啊。
于是脑海中就想到奇数和偶数的定义和它们之间的差别特性等等,应该是用这些来解题??
首先想到的是奇数加奇数等于奇数,偶数加偶数等于偶数。。。然而发现这些没用
好吧,是我想错了方向,不应该把X当成一个整体的数,这题目是要让你数x里面1的个数,是让你数数,人家从来都没说要你数的X是一个数!!!
这下醒悟过来后,我开始将X想象成一堆数,一堆0和1。
假如X里面只有一个0和一个1时,答案是1;两个1时,答案是0,两个0时,答案是0
这像什么?没错就是:异或运算^
现在将这堆数(偶数个)分成两部分,前一半和后一半的数一 一对应进行异或运算,得到的结果再分成更少的两部分,重复上一个步骤,直到只剩一个数,就是答案了。
例如:1101,分成11和01两部分,11^01=10,10再分成1和0,1^0=1。得到结果
//c实现代码int odd_ones(unsigned x){/* retrun 1 when x contains an odd number of 1s;0 otherwiseAssume w=32*/x ^= x>>16;//x右移16位,然后将x的高16位和低16位异或,忽略32位数结果里面不相干的高16位。x ^= x>>8;x ^= x>>4;x ^= x>>2;x ^= x>>1;//现在最右面的一位就是结果了x&=0x1;//将不相干的高31位置零得到结果return x;}
将操作反过来,想想下面的代码又是什么意思???
int odd_ones1(unsigned x){x ^= x>>1;x ^= x>>2;x ^= x>>4;x ^= x>>8;x ^= x>>16;x&=0x1;return x;}
。
。
。
。
。
。
。
。
。
。
。
想到了吗??
。
。
。
。
异或操作反过来是错的!!!下面的代码是错的!!!
阅读全文
0 0
- 当x有奇数个1时返回1,retrun 1 when x contains an odd number of 1s
- ICS Return 1 when x contains an odd number of 1s,0 otherwise(判断二进制表示中1的个数是否为奇数)
- 编写函数,若 x 有奇数个 1 则返回1, 偶数个返回 0
- Return 1 when x can be represented as an n-bit, 2's complment number; 0 otherwise
- 当x中包含偶数个1返回1,否则返回0
- Number of 1s
- c程序:有一函数当x<0时y=1,当x>0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,输出y值
- 4.有一函数当x<0时y=1,当x>0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,输出y值.
- 有一函数当x<0时y=1,当x>0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,输出y值
- 01串出现奇数个1的方案数 2016四川省赛 Odd Discount
- 计算x中有多少个为1的位
- x=x&(x-1)
- x=x&(x-1)
- x = x&(x-1)
- x = x&(x-1)
- 输出(x/1!)+(x*x*x/3!)+(x*x*x*x*x/5!)+````
- 当x趋于0如何证明sin(x)/x的极限为1
- ( (x&y) + ( (x^y)>>1 ) )是什么意思?what's up?
- [2017百度之星程序设计大赛
- img之间的间隙问题
- eclipse中查看源代码
- Android第五天
- CodeVS刷题日记·1842·白银
- 当x有奇数个1时返回1,retrun 1 when x contains an odd number of 1s
- CTF web总结--利用mysql日志getshell
- 前端技术
- 数据挖掘入门指南:以kaggle:titanic为例
- Day59-Oracle03
- HTML5 音频 视频处理
- JavaWeb架构及各对象转换
- 购物车 思路
- OAF中调用plsql函数和存储过程