首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
x为整型,请用位运算实现x%8。
[填空题]
x为整型,用位运算实现x%8的表达式是
1
。
添加笔记
邀请回答
收藏(803)
分享
24个回答
添加回答
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
admin.root
x&0x7也算错?
发表于 2017-02-14 19:09:43
回复(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收藏
13044浏览
热门推荐
相关试题
用代码实现在页面的固定区域内实现图...
人人网
2011
Javascript
前端工程师
评论
(17)
来自
人人网2011前端工程师笔试卷
实现 input 输入框的自动匹配。
人人网
2011
Javascript
前端工程师
评论
(11)
来自
人人网2011前端工程师笔试卷
运行 ldd hello 可以得到...
百度
C++
评论
(3)
定义网络传输数据包为以下结构体,其...
人人网
评论
(26)
来自
人人网2015研发笔试卷D
“连戏”在...
产品
运营
哔哩哔哩
行业常识
2020
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题