首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
x为整型,请用位运算实现x%8。
[填空题]
x为整型,用位运算实现x%8的表达式是
1
。
查看答案及解析
添加笔记
邀请回答
收藏(803)
分享
24个回答
添加回答
1
admin.root
x&0x7也算错?
发表于 2017-02-14 19:09:43
回复(0)
更多回答
62
推荐
大漠苍鹰
当我们求余的时候,相当于除以2的N次冥,也就是相当于把数本身右移N位,但是右移掉的那些位需要通过位运算进行保留;用以上例子来说,X%8即X%2^3,那么就需要右移三次,那么移去的三位需要保留下来,而8=1000,刚好,可以使用0111来保留下来后三位,于是,对于除数都是2的整数次幂的情况,可以使用x & (2^n-1)的方法进行与运算,保留下来的最末尾的n位就是余数。
该题中,结果为x&7.
编辑于 2015-02-03 17:12:06
回复(4)
7
早起的鸟有虫吃
对于2的整数次幂的数,可以让该数按位取反后得到的数,再进行&运算。
本题中8为1000,按位取反后为0111,也就是整数7,所以结果为:x &7
发表于 2016-06-17 16:00:53
回复(1)
5
小花开
取模运算转化成位运算 (在不产生溢出的情况下):
a % (2^n) 等价于 a & (2^n - 1)
参考资料:http://blog.csdn.net/black_ox/article/details/46411997
发表于 2016-08-08 16:08:07
回复(0)
2
朱珠
(1) 取模运算转化成位运算 (在不产生溢出的情况下)
a % (2^n) 等价于 a & (2^n - 1)
(2)乘法运算转化成位运算 (在不产生溢出的情况下)
a * (2^n) 等价于 a<< n
(3)除法运算转化成位运算 (在不产生溢出的情况下)
a / (2^n) 等价于 a>> n
例: 12/8 == 12>>3
(4) a % 2 等价于 a & 1
(5) if (x == a) x= b;
else x= a;
等价于 x= a ^ b ^ x;
(6) x 的 相反数 表示为 (~x+1)
发表于 2017-06-02 11:45:56
回复(0)
2
Computationalism
我去,x&0x7也算错
发表于 2016-09-12 20:43:37
回复(0)
1
666的佩奇爸爸
(x<<28)>>28
发表于 2018-07-02 16:33:59
回复(0)
1
落叶,
答案是:x&7,通过分析我们可以知道x%8是等于:x-(x>>3),从中我可以知道x%8就是保留了x的二进制数的最后三位,所以可以直接通过:x&7实现。
发表于 2017-05-08 15:37:25
回复(0)
1
崔永博
考虑到x为负数的情况:
(x>0) ? (x&7) : -(abs(x) & 7);
发表于 2016-11-14 19:36:08
回复(0)
1
MSean
位运算实现求模%(针对除数是2^n即2的整数次幂且被除数为正整数时):
x % (2^n) 等价于 x & (2^n - 1)
如:x % 8 等价于 x & 7
发表于 2016-08-29 16:45:20
回复(0)
1
墨儿
#include <stdio.h>
int main()
{
int i = 80;
printf ("%d/8 = %d\n",i,i/8);
printf ("%d/8 = %d\n",i,i>>3);
i=83;
printf ("%d%8 = %d\n",i,i%8);
printf ("%d%8 = %d\n",i,i&7);//跟7相与。
}
刚开始没有想通, 看了这个博文就明白了。:
http://blog.csdn.net/gothicane/article/details/3839180
发表于 2014-12-11 12:42:27
回复(0)
3
deamon
既然X是整型,就可正可负,负数的时候x&7的结果就不对了,求解答
发表于 2015-08-29 19:36:41
回复(5)
0
stincstant谷野
各位大神,我的答案是x^8,不知道这样为什么不对
发表于 2017-07-17 15:29:11
回复(0)
0
lihan2011
x&0x7也不对的咯。。
发表于 2017-03-30 14:26:57
回复(0)
0
ZY_Z
((x>>3)<<3)^x也可以,x / 8 * 8 +余数=x;
发表于 2016-08-31 22:19:37
回复(0)
0
WillWu
x&00000111
发表于 2016-07-20 16:51:09
回复(0)
0
NEWTON
((x < 0) ? (-((-x) & 7)) : (x & 7))
发表于 2016-05-02 14:13:12
回复(0)
0
吼哈哈
右移求除,与2^(n-1)就是求余了
发表于 2016-03-04 13:44:22
回复(0)
0
Boosting
写对了却给批错了 什么鬼
发表于 2015-10-26 16:09:33
回复(0)
0
白日黄粱梦
使用移位运算符也是可以的嘛x<<28)>>28,而且完美解决x为负数的情况
发表于 2015-10-07 11:46:11
回复(2)
0
夏雨天
x&7:
对8取余,1000(2),这就是要保留后面三为,所以用全1保留,所以是x&7
发表于 2015-09-19 16:44:19
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
C++
人人网
来自:
人人网2015研发笔试卷D
上传者:
可爱的小丁丁
难度:
24条回答
803收藏
12714浏览
热门推荐
相关试题
用 js、html、css实现一...
人人网
2011
Javascript
前端工程师
评论
(5)
来自
人人网2011前端工程师笔试卷
实现 input 输入框的自动匹配。
人人网
2011
Javascript
前端工程师
评论
(11)
来自
人人网2011前端工程师笔试卷
用代码实现在页面的固定区域内实现图...
人人网
2011
Javascript
前端工程师
评论
(17)
来自
人人网2011前端工程师笔试卷
定义网络传输数据包为以下结构体,其...
人人网
评论
(26)
来自
人人网2015研发笔试卷D
有同事不完成任务,影响力进度,你怎...
业务综合
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题