c# – 在我的控制台项目中生成偶数的更有效的语法是什么?
发布时间:2020-12-15 18:06:19 所属栏目:百科 来源:网络整理
导读:我最近开始学习c#,并了解到当我写这个For循环时,有两种方法可以让我的代码输出偶数.我学习了第2版的语法,这对我来说很直观.但是,版本1是我在网上其他地方找到的一个例子.我想了解两个版本之间是否存在差异. //Version 1for (int num = 0; num 100; num+=2) {
我最近开始学习c#,并了解到当我写这个For循环时,有两种方法可以让我的代码输出偶数.我学习了第2版的语法,这对我来说很直观.但是,版本1是我在网上其他地方找到的一个例子.我想了解两个版本之间是否存在差异.
//Version 1 for (int num = 0; num < 100; num+=2) { Console.WriteLine (num); } //Version 2 for (int num = 0; num < 100; num++) { if (num % 2 == 0) { Console.WriteLine (num); } } 在两种可能的方法中,两种语法之间有什么区别吗?如果是,哪个更有效,为什么? 解决方法
对于给定的N值(在您的示例代码中,N = 100)
>版本#1添加N / 2 你忘记了第3版,有点笨拙.按位运算比除法更便宜,因为我们知道C#世界中的整数是二进制补码二进制值,所以低位的状态告诉我们整数是否是偶数,因此: bool isEven( int n ) { return 0 == ( n & 1 ) ; } 我们可以编写一个测试工具,如下所示: class Program { public static int Version1(int n) { int cnt = 0; for ( int i = 0 ; i < n ; i+=2 ) { ++cnt; } return cnt; } public static int Version2(int n) { int cnt = 0; for ( int i = 0 ; i < n ; ++i ) { if ( i % 2 == 0 ) { ++cnt; } } return cnt; } public static int Version3(int n) { int cnt = 0; for ( int i = 0 ; i < n ; ++i ) { if ( 0 == (i & 1) ) { ++cnt; } } return cnt; } private static void Main(string[] args) { int n = 500000000; Stopwatch timer = new Stopwatch(); timer.Start(); Version1( n ); timer.Stop(); Console.WriteLine( "{0:c} -- Version #1 (incrementing by 2)",timer.Elapsed ) ; timer.Restart(); Version2(n); timer.Stop(); Console.WriteLine( "{0:c} -- Version #2 (incrementing by 1 with modulo test)",timer.Elapsed ) ; timer.Restart(); Version3(n); timer.Stop(); Console.WriteLine( "{0:c} -- Version #3 (incrementing by 1 with bit twiddling)",timer.Elapsed ) ; return; } } 并找出哪个实际上更快.上面的程序运行循环500,000,000次,因此我们得到足够大的数字来衡量. 以下是我在VS 2013中获得的时间: >调试构建(非优化): 00:00:00.5500486 -- Version #1 (incrementing by 2) 00:00:02.0843776 -- Version #2 (incrementing by 1 with modulo test) 00:00:01.2507272 -- Version #3 (incrementing by 1 with bit twiddling) >版本#2比版本#1慢3.789倍 >发布版本(优化) 00:00:00.1680107 -- Version #1 (incrementing by 2) 00:00:00.5109271 -- Version #2 (incrementing by 1 with modulo test) 00:00:00.3367961 -- Version #3 (incrementing by 1 with bit twiddling) >版本#2比版本#1慢3.041倍>版本#3比版本#1慢2.005倍 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |