惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Securelist
AI
AI
S
Schneier on Security
T
The Exploit Database - CXSecurity.com
C
CERT Recently Published Vulnerability Notes
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threat Research - Cisco Blogs
T
Tenable Blog
G
GRAHAM CLULEY
腾讯CDC
L
Lohrmann on Cybersecurity
Martin Fowler
Martin Fowler
博客园 - 【当耐特】
The Cloudflare Blog
P
Proofpoint News Feed
V
Visual Studio Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
AWS News Blog
AWS News Blog
D
Docker
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Latest news
Latest news
L
LINUX DO - 热门话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
L
LangChain Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
W
WeLiveSecurity
Blog — PlanetScale
Blog — PlanetScale
云风的 BLOG
云风的 BLOG
P
Privacy International News Feed
Cloudbric
Cloudbric
Attack and Defense Labs
Attack and Defense Labs
量子位
爱范儿
爱范儿
F
Fortinet All Blogs
博客园 - 三生石上(FineUI控件)
V
Vulnerabilities – Threatpost
Schneier on Security
Schneier on Security
J
Java Code Geeks
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
N
Netflix TechBlog - Medium
博客园 - 司徒正美
I
InfoQ
WordPress大学
WordPress大学
GbyAI
GbyAI
Google DeepMind News
Google DeepMind News

博客园 - 兵

C#异常处理的方式 CryptoAPI与.NET数字签名类的交互问题 Firefox中Iframe的blur与focus事件问题 .NET中几种基本的线程同步方法 为什么说WinForm的控件只能在主线程中创建和调用 C#与Native C++互相访问 PHP5中的引用 Windows版的PDO太衰了 Framework里某些类型成员方法的一点疑惑 发现一个FireFox的问题 C#中COM操作(二)---接口查询 C#中COM操作(一)---实例化 非弹出式的模态对话框的背景遮罩 DOTNET事件拾遗 CSS开发辅助工具:Internet Explorer Developer Toolbar 如何利用客户端缓存对网站进行优化? 一个多表查询引出的问题(2) 类的成员初始化顺序 一个多表查询引出的问题(1)
另外一种高效地判断奇数和偶数的方法
· 2008-07-28 · via 博客园 - 兵

另外一种高效地判断奇数和偶数的方法

Posted on 2008-07-28 11:42    阅读(1108)  评论()    收藏  举报

在我们日常的编程当中,常常会遇到判断某个整数属于奇数还是偶数的情况。 一般我们都是用的取模的操作,前几天在网上看到了一种称作快速有效的判断做法,利用2进制进行判断。
大家都知道,奇数的最低位一定是1,而偶数的最低位一定是0.所以我们可以根据这个特性,让需要判定的整数和1进行“与”运算,这样就只留下了原数的最低位,然后直接判断这个数等于1还是等于0即可。

实现代码如下:

 1class Program
 2{
 3    static void Main(string[] args)
 4    {
 5        bool s = OddEven.IsEven(4);
 6        Console.WriteLine(s);
 7
 8        s = OddEven.IsOdd(55877554);
 9        Console.WriteLine(s);
10    }

11}

12
13/// <SUMMARY>
14/// 判断一个整数是奇数还是偶数。
15/// </SUMMARY>

16class OddEven
17{
18    static private int s = 1;
19
20    static public bool IsEven(int a)
21    {
22        return ((a & s) == 0);
23    }

24
25    static public bool IsOdd(int a)
26    {
27        return !IsEven(a);
28    }

29}

本人做了个测试来证明这个结论,使用取模的方式和使用与操作的方式比较,各运行5,000,000,000次(数据太小看不出差距),前者的执行所花时间是后者的8倍.理论上这种方式的的确效率高一些,也算是一种有高效简洁的方式,但是要体现出差距来就需要至少上亿次的操作才能看出,对于平时只使用那么几次的代码来说,几乎可以忽略不计这两者的差别了.但是使用与操作的话,如果不加注释,很难从代码里看出来作者想要得到一个整数的奇偶性结果,不利于代码阅读.

    现在的年代硬件不是问题,在可读性的要求大于代码性能要求(性能也不能差得离谱)的时候,还是少用为好.但是作为开拓视野的一种方式也未尝不可.

工作五年,长期从事于asp.net方面的编程,业余爱好VC编程,温和、谦虚、自律、自信、善于与人交往沟通