posts - 6,  comments - 30,  trackbacks - 0
   本人由于刚接触编程不久,思考的问题没有大家的那么深入。这次我仅仅只是一点基于学习的思考。今天在家里复习学校学过的功课,关于运算操作符的那一章节。  编写一个程序:从界面输入一个整数,要求求该数除以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>
 2using namespace std;
 3
 4int 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セ 阅读(3912) 评论(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
好像法  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

常用链接

留言簿(1)

随笔分类

随笔档案

文章分类

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜