随笔
C++博客
首页
新随笔
联系
聚合
管理
posts - 6, comments - 30, trackbacks - 0
关于除以2的n次方求余数的思考
本人由于刚接触编程不久,思考的问题没有大家的那么深入。这次我仅仅只是一点基于学习的思考。今天在家里复习学校学过的功课,关于运算操作符的那一章节。 编写一个程序:从界面输入一个整数,要求求该数除以8后的余数。这个题目确实很简单,只要用%运算即可。但是我写出代码后发现编译器对于负数求模运算后所得的余数是负数。当然大家很容易想到此时加上除数即可达到题目的要求。我想这个代码大都会写,我就不再细述,但是今天我想输得方法并不是此。一个整型(int)占4个字节,每个字节8位。那么每个int占32个位。如果我们把该整数化成8进制,那么其8进制表示的数的个位数就是所求的余数。因为如果一个8进制数是xyz,那么其等于x*8*8+y*8+z;除以8取余就是z;那么我们再联想到计算机的存储数据的方式,二进制。而二进制转化成8进制的最简单的方法则是将该二进制从右至左按每三个数为一单元转化为8进制作为一位。不够的补0;那么由此可知,其正余数就是该数二进制表示的末尾3位数。 那么只要用与运算去保留后三位。即该数与上二进制(111)即可,而从界面输入的是10进制,则要考虑转化,很容易知道其为7。故设输入的数位num,则num&7所得结果即是。
而对于2的n次方作为除数是则只要num&(2的n次方-1)
1
#include
<
iostream
>
2
using
namespace
std;
3
4
int
main()
5
{
6
int
num;
//
输入的整数
7
int
i;
//
由于考虑除数不同,在此自己设置除数2的n次方
8
cout
<<
"
请输入一个整数:
"
;
9
cin
>>
num;
10
cout
<<
"
请输入除数:
"
;
11
cin
>>
i;
12
num
=
num
&
(i
-
1
);
13
cout
<<
num
<<
endl;
14
return
0
;
15
}
posted on 2011-02-03 21:17
あ维wêiセ
阅读(3913)
评论(5)
编辑
收藏
引用
所属分类:
C++
FeedBack:
#
re: 关于除以2的n次方求余数的思考
2011-02-11 19:26 |
Cunch
想法不错, 希望共同切磋
回复
更多评论
#
re: 关于除以2的n次方求余数的思考
2011-02-11 19:27 |
Cunch
想法确实不错
回复
更多评论
#
re: 关于除以2的n次方求余数的思考[未登录]
2011-02-11 21:13 |
zero
貌似很久前就有这道面试题了?
回复
更多评论
#
re: 关于除以2的n次方求余数的思考
2011-02-13 10:08 |
あ维wêiセ
嗯?是吗?那我还要倍感庆幸呢@zero
回复
更多评论
#
re: 关于除以2的n次方求余数的思考[未登录]
2011-12-07 08:37 |
zhang
好像法
回复
更多评论
刷新评论列表
只有注册用户
登录
后才能发表评论。
【推荐】100%开源!大型工业跨平台软件C++源码提供,建模,组态!
相关文章:
关于除以2的n次方求余数的思考
中缀表达式转为后缀表达式
关于Visual C++2010编译器的问题
有关二叉查找树的一些功能(BST)
链表实验
网站导航:
博客园
IT新闻
BlogJava
知识库
博问
管理
<
2024年11月
>
日
一
二
三
四
五
六
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
常用链接
我的随笔
我的评论
我参与的随笔
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
C++(5)
Java(1)
随笔档案
2011年2月 (1)
2011年1月 (5)
文章分类
个人总结(1)
文章档案
2011年1月 (1)
搜索
最新评论
1. re: 中缀表达式转为后缀表达式
你可以考虑先将表达式中的数字字符转换成对应的数字,成为一个元素,那么打印时加空格就好@js
--yangwei
2. re: 中缀表达式转为后缀表达式
是的,要牺牲一个来区分队空和队满@jhayumu
--yangwei
3. re: 中缀表达式转为后缀表达式
(8+9*10)-4/2+3
与
(8+91*0)-4/2+3
怎么区分?
--js
4. re: 关于除以2的n次方求余数的思考[未登录]
好像法
--zhang
5. re: 关于Visual C++2010编译器的问题
楼上说的比较对,写模板最好用包含模型
用分离模型编译容易出问题
Boost中很多子库都采用的是包含模型
--marmot
阅读排行榜
1. 中缀表达式转为后缀表达式(6015)
2. 关于除以2的n次方求余数的思考(3913)
3. 关于Visual C++2010编译器的问题(2733)
4. 链表实验(1939)
5. 有关二叉查找树的一些功能(BST)(1907)
评论排行榜
1. 关于Visual C++2010编译器的问题(12)
2. 中缀表达式转为后缀表达式(5)
3. 链表实验(5)
4. 关于除以2的n次方求余数的思考(5)
5. 初学java(一)(3)