利用 操作符特性 代替if判断语句
参考:http://blog.csdn.net/speedme/article/details/22916181
1.&&的判断特性
- #include <stdio.h>
- int sumf(int i)
- {
- int sum = ;
- #if 0
- i && (sum = i+ sumf(i-));
- #else
- if(i!=){
- sum = i+ sumf(i-);
- }
- #endif
- return sum;
- }
- int main()
- {
- printf("sum(%d)=%d\n",,sumf());
- printf("aaaaaaaaaaaa\n");
- }
用gcc编译,看起来if判断语句效率还高一点。
- sumf:// if(i!=0){ sum = i+ sumf(i-1); }
- pushl %ebp
- movl %esp, %ebp
- subl $, %esp
- movl $, -(%ebp)
- cmpl $, (%ebp)
- je .L2
- movl (%ebp), %eax
- subl $, %eax
- movl %eax, (%esp)
- call sumf
- addl (%ebp), %eax
- movl %eax, -(%ebp)
- .L2:
- movl -(%ebp), %eax
- leave
- ret
- sumf://i && (sum = i+ sumf(i-1));
- pushl %ebp
- movl %esp, %ebp
- subl $, %esp
- movl $, -(%ebp)
- cmpl $, (%ebp)
- je .L3
- movl (%ebp), %eax
- subl $, %eax
- movl %eax, (%esp)
- call sumf
- addl (%ebp), %eax
- movl %eax, -(%ebp)
- cmpl $0, -12(%ebp)
- .L3:
- movl -(%ebp), %eax
- leave
- ret
2.另类的迭代法:::::(!的判断特性这个比较实用一点)
- #include <stdio.h>
- typedef unsigned int (*fun)(unsigned int);
- unsigned int Solution3_Teminator(unsigned int n)
- {
- return ;
- }
- unsigned int Sum_Solution3(unsigned int n)
- {
- static fun f[] = {Solution3_Teminator, Sum_Solution3};
- return n + f[!!n](n - ); //注意此处
- }
- int sumf(int i)
- {
- int sum = ;
- #if 0
- i && (sum = i+ sumf(i-));
- #else
- if(i!=){
- sum = i+ sumf(i-);
- }
- #endif
- return sum;
- }
- int main()
- {
- printf("Sum_Solution3(%d)=%d\n",,Sum_Solution3());
- printf("sum(%d)=%d\n",,sumf());
- printf("aaaaaaaaaaaa\n");
- }
利用 操作符特性 代替if判断语句的更多相关文章
- java设计模——反射的应用 (利用反射来去除if判断语句)
利用反射来去除if判断语句 我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方. If(“add”.equalsIgnoreCase(fu ...
- [19/09/16-星期一] Python的运算符和条件判断语句
一.运算符 (1)算术运算符 + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作) a = 10 + 5 计算 a = 'hello' + ' ' + 'world' 拼串 - ...
- 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). 分析: 首先想到的是写递归函数,但是遇 ...
- 求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) 分析:这题本来很 ...
- 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) 分析:这题本来很 ...
- C# if判断语句执行顺序
DataTable dt = null; )//不报错,因为先执行dt != null 成立时才执行dt.Rows.Count > 0 { } && dt != null)//报 ...
- 前端笔记知识点整合之JavaScript(三)关于条件判断语句、循环语句那点事
一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力 ...
- 前端笔记之JavaScript(三)关于条件判断语句、循环语句那点事
一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力语法 ...
- puppet(3) 变量、数据类型、表达式、条件判断语句-if、case、selector、unless
puppet(4) 变量.数据类型.表达式.条件判断语句-if.case.selector语句 puppet变量: 1.名称必须以$开头:赋值使用=,支持追加赋值+=: 2.每个变量都有两种引用格式: ...
随机推荐
- select标签操作大全
http://blog.csdn.net/hhhh2012/article/details/8610336
- Android开发中出现cannot be resolved to a variable错误,也就是R文件不能生成。
最近开始学过习Android开发,配置完成开发环境后,在创建第一个Android项目就出现了cannot be resolved to a variable错误,也就是R文件不能生成的问题. 以下是从 ...
- Dokcer 组成原理简介
首先来张图了解Docker的组成 重要 Docker在启动容器的时候,需要创建文件系统,为rootfs提供挂载点.最初Docker仅能在支持Aufs文件系统的Linux发行版上运行,但是由于Aufs未 ...
- widget intent重复问题
今天在做android widget时发现点击任意widget时只会更新最后一个widget 原来是requestCode的问题 Intent intent = new Intent(WidgetPr ...
- jQuery File Upload
jQuery File Upload介绍.............................................. 2 实现基本原理......................... ...
- C#使用WinAPI 修改电源设置,临时禁止笔记本合上盖子时睡眠
原文 http://www.cnblogs.com/h46incon/archive/2013/09/03/3299138.html 在 阻止系统自动睡眠的小软件,附C#制作过程 ,弄了一个防止系统睡 ...
- Sicily-1443
一. 题意: 模拟队列的操作,按优先级pop.如果有元素pop,则其他在队列里面的元素的时间都要加1.如果队头的元素因为优先级不够高而要push回队列的时候,所有元素的时间都不用改变. 二. ...
- BZOJ 3385: [Usaco2004 Nov]Lake Counting 数池塘
题目 3385: [Usaco2004 Nov]Lake Counting 数池塘 Time Limit: 1 Sec Memory Limit: 128 MB Description 农夫 ...
- ORACLE 使用RMAN管理归档日志 archived log
oracle 归档日志通常使用rman进行管理,作为备份集的一部分 正常情况下,可以根据方法删除 1 过期策略 crosscheck archivelog all; delete expired ar ...
- poj 3128 Leonardo's Notebook(置换的幂)
http://poj.org/problem?id=3128 大致题意:输入一串含26个大写字母的字符串,能够把它看做一个置换.推断这个置换是否是某个置换的平方. 思路:具体解释可參考url=ihxG ...