`
hongbochen1223
  • 浏览: 43880 次
文章分类
社区版块
存档分类
最新评论

自增/自减学习

 
阅读更多

在这里学习了C中的自增和自减,但是后面学习了前缀和后缀及其混合之后,发现使用不同的编译器,其中的规则是不一样的,而且平时我们书写程序的时候也不会写这样复杂的代码,例如i+++i+++i++等,这样一方面在可读性方面很差,另一方面就是在移植性方面,不同的编译器就会出现不同的结果,所以这样写是不理想的。

#include <stdio.h>

/**
 * 自增/自减运算的应用
 * @brief main
 * @return
 */
int main(void)
{
    int a = 5,b,c,i = 10;//变量定义及初始化

    //将a赋值给b,然后自增1
    b = a++; //b = 5,a = 6
    //b先自增1,然后赋值给c
    c = ++b; //b = 6,c = 6

    printf("a = %d,b = %d,c = %d\n",a,b,c);  //a=6,b=6,c=6

    /**
     * C函数参数的入栈顺序是从右向左的
     * 主要是为了支持参数可变长度
     * 则下面的输出为12,11,10
     */
    printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++); /**输出i,i++,i++**/

    printf("%d\n",++i); //i自增1,然后输出i 13 i=13
    printf("%d\n",--i); //i自减1,然后输出i 12 i=12
    printf("%d\n",i++); //先输出i,然后i自增1 12 i=13
    printf("%d\n",i--); //先输出i,然后i自减1 13 i=12
    printf("%d\n",-i++); //i先取负,然后输出i,最后i自增1 -12 i=13
    printf("%d\n",-i--); //i先取负,然后输出i,最后i自减1 -13 i=12

    /**
     * 有关于自增/自减问题的总结
     */
    /*************************************/
    /*  1:表达式中,一般情况下,是从左向右   */
    /*     函数参数中,运算方向是从右向左    */
    /************************************/

    /*************************************/
    /*  2:后缀,先取值,再自增             */
    /************************************/
    //例子
    int m = 5,n;
    n = m+++m+++m++;  //相当于a=(m++) + (m++) + (m++);
    //但由于是后缀,则先取值运算之后,在进行自增
    //所以 n = m + m + m; m++; m++; m++;
    //所以最后结果 n=15,m=8
    printf("n = %d,m = %d",n,m);

    /*************************************/
    /*     3:前缀,前两个自增后取值         */
    /*     后面的每个自增后都取值           */
    /************************************/
    //例子
    int p,j=5;
    p = ++j + (++j) + (++j);
    //则根据规则,前两个自增之后再取值
    //则变化之后 j=7 p = 7 + 7 + (++j);
    //两个之后的所有前缀每一个都先自增接着取值
    //则 j = 8, p = 7 + 7 +8;
    // p = 22, j = 8
    printf("p = %d,j = %d",p,j);

    /*************************************/
    /*  4:前缀,后缀混合情况               */
    /************************************/
    //学到这里我发现这个编译器不同,最后的结果也是不一样的,所以感觉很没有意义

    return 0;
}

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    Java中自增和自减操作符(++/--)的那些事

    主要给大家介绍了关于Java中自增和自减操作符(++/--)的那些事,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    asp.net物流系统,适合学习使用,可以自增自减功能

    asp.net物流系统,适合学习使用,可以自增自减功能,asp.net物流系统,布局合理,界面简洁

    C++ 自增、自减运算符的重载和性能分析小结

    主要介绍了C++ 自增、自减运算符的重载和性能分析小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    C程序实例大全,学习C语言的好帮手

    007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数...

    c语言实例解析(第二版)高清pdf电子书

    第一部分 基础篇 实例1 第一个C程序 实例2 运行多个源文件 实例3 求整数之积 实例4 比较实数大小 实例5 字符的输出 实例6 显示变量所占字节数 实例7 自增/自减运算 实例8 数列求和 实例9 乘法...

    C语言学习动画

    这是台湾编写的 C 语言入门学习的动画资料,内容包括:ASCII码和二... 程序是怎样执行的, 程序的三种结构, 程序的入口, 结构及其成员, 自增和自减运算, 计算机是如何存放二进制数的, 返回值类型, 逻辑判断, 高低字节等

    220个经典C程序源码文件,可以做为你的学习设计参考.zip

    007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求...

    Java编程语言的基础知识作了一个较为全面的汇总-供大家学习研究参考

    1、Java主要特点 2、计算机的高级汇编语言类型: 3、JVM(Java Visual Machine) 4、编写第一个Java程序并运行 ...自增、自减操作 三目运算符 关系运算符 逻辑运算 位运算 面试题:请解释&&和&、||和|的区别?

    基于django 的orm中非主键自增的实现方式

    本人的解决办法如下,供大家参考,也欢迎大家提供更多的实现方式,互相学习。 class ProductSpu(models.Model): """ 商品表 """ _database = 'payment' id = models.UUIDField(primary_key=True, default=uuid...

    C语言学习实例220例

    007 自增/自减运算 008 数列求和 009 乘法口诀表 010 猜数字游戏 011 模拟ATM(自动柜员机)界面 012 用一维数组统计学生成绩 013 用二维数组实现矩阵转置 014 求解二维数组的最大/最小元素 015 利用数组求前n个质数...

    Java2入门经典.rar

    自增和自减运算符 短整型数计算 整数算术运算中的错误 浮点运算 混合数据类型的算术运算表达式 显式类型强制转换 赋值语句中的自动类型转换 op=运算符 数学函数和常量 字符的存储 字符转义序列 字符的算术运算 按位...

    java2入门经典.part01

    自增和自减运算符 短整型数计算 整数算术运算中的错误 浮点运算 混合数据类型的算术运算表达式 显式类型强制转换 赋值语句中的自动类型转换 op=运算符 数学函数和常量 字符的存储 字符转义序列 字符的算术运算 按位...

    map与set的底层大概框架-红黑树

    另外一个难点就是红黑树的迭代器的自增自减操作, 红黑树的自增操作需要用到二叉树的非递归遍历思想,主要是一个非递归的中序遍历。 看不懂的友友可以去力扣搜一搜相应的二叉树非递归题目。做一做, 就可以很好的...

    实例解读51单片机完全学习与应用

    8.5.4 自增/自减指令——INC &lt;byte&gt; / DEC &lt;byte&gt; 8.5.5 乘法指令——MUL AB 8.5.6 除法指令——DIV AB 8.5.7 十进制调整指令——DA A 8.6 ■逻辑运算指令 8.6.1 与操作——ANL &lt;dest-byte&gt;,&...

    Python学习笔记(1).docx

    Raw_input():接收用户标准输入 Python不支持C语言中的自增1或自减操作符,这是因为+ 和-也是单目操作符,Python会将—n解释为-(-n)从而得到n,同样++n的结果也是n. 带都好的print语句输出的元素之间会自动添加一...

    Java学习笔记(四)

    文章目录Java语言基础(二)一、基本数据类型1.1 整数类型1.2 浮点类型1.3 ...自增和自减运算符3.4 关系运算符3.5 比较运算符3.6 位运算符3.7 三元运算符3.8 运算符优先级四、数据类型转换4.1 隐式类型转换4.2 显式类型...

    《由浅入深学C++-基础、进阶与必做300题》pdf格式 (完整版 带目录

    3.1.3 自增和自减运算符 42 3.1.4 赋值运算符 43 3.1.5 关系运算符 44 3.1.6 逻辑运算符 45 3.1.7 条件运算符 46 3.1.8 逗号运算符 47 3.1.9 位运算符 48 3.1.10 sizeof运算符 49 3.2 运算符的优先级和结合...

    《C语言学习笔记》顺序、条件、循环1

    (1)赋值语句:x = y + 3 (2)自增语句:++i (3)自减语句:--i (4)函数调用语句:printf("请输入半径:\n")

    C++上机实验报告实验六.doc

    对Point类重载"++"(自增)、"――"(自减 )运算符,实现对坐标值的改变。 2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类 、汽车(motorcar)类,从bicycle和motorcar派生出摩托车...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    4.4.1 自增和自减操作 80 4.4.2 for语句 82 4.4.3 for语句省略形式 84 4.5 语句中不能不说的事 84 4.5.1 小心复杂语句中创建的变量 85 4.5.2 别让循环次数给弄懵了 86 4.5.3 循环的嵌套 87 4.6 continue...

Global site tag (gtag.js) - Google Analytics