参考:http://blog.csdn.net/speedme/article/details/22916181

1.&&的判断特性

  1. #include <stdio.h>
  2.  
  3. int sumf(int i)
  4. {
  5. int sum = ;
  6. #if 0
  7. i && (sum = i+ sumf(i-));
  8. #else
  9. if(i!=){
  10. sum = i+ sumf(i-);
  11. }
  12. #endif
  13. return sum;
  14. }
  15.  
  16. int main()
  17. {
  18. printf("sum(%d)=%d\n",,sumf());
  19. printf("aaaaaaaaaaaa\n");
  20. }

用gcc编译,看起来if判断语句效率还高一点。

  1. sumf:// if(i!=0){ sum = i+ sumf(i-1); }
  2. pushl %ebp
  3. movl %esp, %ebp
  4. subl $, %esp
  5. movl $, -(%ebp)
  6. cmpl $, (%ebp)
  7. je .L2
  8. movl (%ebp), %eax
  9. subl $, %eax
  10. movl %eax, (%esp)
  11. call sumf
  12. addl (%ebp), %eax
  13. movl %eax, -(%ebp)
  14. .L2:
  15. movl -(%ebp), %eax
  16. leave
  17. ret
  1. sumf://i && (sum = i+ sumf(i-1));
  1. pushl %ebp
  2. movl %esp, %ebp
  3. subl $, %esp
  4. movl $, -(%ebp)
  5. cmpl $, (%ebp)
  6. je .L3
  7. movl (%ebp), %eax
  8. subl $, %eax
  9. movl %eax, (%esp)
  10. call sumf
  11. addl (%ebp), %eax
  12. movl %eax, -(%ebp)
  13. cmpl $0, -12(%ebp)
  14. .L3:
  15. movl -(%ebp), %eax
  16. leave
  17. ret

2.另类的迭代法:::::(!的判断特性这个比较实用一点)

  1. #include <stdio.h>
  2. typedef unsigned int (*fun)(unsigned int);
  3.  
  4. unsigned int Solution3_Teminator(unsigned int n)
  5. {
  6. return ;
  7. }
  8.  
  9. unsigned int Sum_Solution3(unsigned int n)
  10. {
  11. static fun f[] = {Solution3_Teminator, Sum_Solution3};
  12. return n + f[!!n](n - ); //注意此处
  13. }
  14.  
  15. int sumf(int i)
  16. {
  17. int sum = ;
  18. #if 0
  19. i && (sum = i+ sumf(i-));
  20. #else
  21. if(i!=){
  22. sum = i+ sumf(i-);
  23. }
  24. #endif
  25. return sum;
  26. }
  27.  
  28. int main()
  29. {
  30. printf("Sum_Solution3(%d)=%d\n",,Sum_Solution3());
  31. printf("sum(%d)=%d\n",,sumf());
  32. printf("aaaaaaaaaaaa\n");
  33. }

利用 操作符特性 代替if判断语句的更多相关文章

  1. java设计模——反射的应用 (利用反射来去除if判断语句)

    利用反射来去除if判断语句 我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方. If(“add”.equalsIgnoreCase(fu ...

  2. [19/09/16-星期一] Python的运算符和条件判断语句

    一.运算符 (1)算术运算符  + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作) a = 10 + 5  计算 a = 'hello' + ' ' + 'world' 拼串  - ...

  3. Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)

    题目描述: 求 1+2+...+n, 要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). 分析: 首先想到的是写递归函数,但是遇 ...

  4. 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法

    来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...

  5. C语言奇思妙想:求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)

    来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...

  6. C# if判断语句执行顺序

    DataTable dt = null; )//不报错,因为先执行dt != null 成立时才执行dt.Rows.Count > 0 { } && dt != null)//报 ...

  7. 前端笔记知识点整合之JavaScript(三)关于条件判断语句、循环语句那点事

      一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力 ...

  8. 前端笔记之JavaScript(三)关于条件判断语句、循环语句那点事

    一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力语法 ...

  9. puppet(3) 变量、数据类型、表达式、条件判断语句-if、case、selector、unless

    puppet(4) 变量.数据类型.表达式.条件判断语句-if.case.selector语句 puppet变量: 1.名称必须以$开头:赋值使用=,支持追加赋值+=: 2.每个变量都有两种引用格式: ...

随机推荐

  1. select标签操作大全

    http://blog.csdn.net/hhhh2012/article/details/8610336

  2. Android开发中出现cannot be resolved to a variable错误,也就是R文件不能生成。

    最近开始学过习Android开发,配置完成开发环境后,在创建第一个Android项目就出现了cannot be resolved to a variable错误,也就是R文件不能生成的问题. 以下是从 ...

  3. Dokcer 组成原理简介

    首先来张图了解Docker的组成 重要 Docker在启动容器的时候,需要创建文件系统,为rootfs提供挂载点.最初Docker仅能在支持Aufs文件系统的Linux发行版上运行,但是由于Aufs未 ...

  4. widget intent重复问题

    今天在做android widget时发现点击任意widget时只会更新最后一个widget 原来是requestCode的问题 Intent intent = new Intent(WidgetPr ...

  5. jQuery File Upload

    jQuery File Upload介绍.............................................. 2 实现基本原理......................... ...

  6. C#使用WinAPI 修改电源设置,临时禁止笔记本合上盖子时睡眠

    原文 http://www.cnblogs.com/h46incon/archive/2013/09/03/3299138.html 在 阻止系统自动睡眠的小软件,附C#制作过程 ,弄了一个防止系统睡 ...

  7. Sicily-1443

    一.      题意: 模拟队列的操作,按优先级pop.如果有元素pop,则其他在队列里面的元素的时间都要加1.如果队头的元素因为优先级不够高而要push回队列的时候,所有元素的时间都不用改变. 二. ...

  8. BZOJ 3385: [Usaco2004 Nov]Lake Counting 数池塘

    题目 3385: [Usaco2004 Nov]Lake Counting 数池塘 Time Limit: 1 Sec  Memory Limit: 128 MB Description     农夫 ...

  9. ORACLE 使用RMAN管理归档日志 archived log

    oracle 归档日志通常使用rman进行管理,作为备份集的一部分 正常情况下,可以根据方法删除 1 过期策略 crosscheck archivelog all; delete expired ar ...

  10. poj 3128 Leonardo&#39;s Notebook(置换的幂)

    http://poj.org/problem?id=3128 大致题意:输入一串含26个大写字母的字符串,能够把它看做一个置换.推断这个置换是否是某个置换的平方. 思路:具体解释可參考url=ihxG ...