语言-C,初学者的笔记,概念的理解、数据类型详解、i++问题,以及输出精度问题等

本文详细探讨了C++中的后置和前置递增运算符(i++和++i)的使用,以及它们在printf语句中的行为。通过实例解释了运算顺序、缓存区的概念,并介绍了非运算符!和逻辑或运算符||的特性。内容涵盖了程序类型、数据类型和格式字符串输出精度,揭示了如何理解和避免i++操作中的常见陷阱。
摘要由CSDN通过智能技术生成

拿出来大家共勉,不足之处请指正。
很久之前的学习笔记了,一直存放在本地中

i++问题

int i=1;
printf("%d,%d\n",i--,i++);

运行结果为:2,1

第一步:把i的值存入缓存器[ebp-0E8h]=1;

第二步:i值加1,i=i+1=2;

第三步:把i的值存入缓存器[ebp-0ECh]=2;

第四步:i值减1,i=i-1=1;

第五步:把缓存器[ebp-0E8h]=1,入栈

第六步:把缓存器[ebp-0ECh]=2,入栈

由++或者–运算的顺序是从右向左,i++在计算过程中会产生缓存区,返回的值就是缓存区的值

int i=1;
printf(“%d,%d\n”,i++,++i);

第一步:i值加1,i=i+1=2;

第二步:把i的值存入缓存区[ebp-0E8h]=2;

第三步:i值加1,i=i+1=3;

第四步:把i=3,入栈

第五步:把缓存区[ebp-0E8h]=2,入栈

故,输出为2,3

总结:

由++或者–运算的顺序是从右向左,故先计算++i,++i的返回值为i本身,本应该是2,但是后面的运算却影响i的值,另外printf输出流的缓存栈是在所有表达式计算完后再入栈的,只需要知道首先入栈的是i的地址里面存的值,下面该表达式i++,i++在计算过程中会产生缓存区,返回的值就是缓存区的值,既是在加1之前需要先备份,这里的备份地址就是[ebp-0E8h]=2,之后i=i+1=3,返回的值为缓存区[ebp-0E8h]=2,第二次入栈的就是第二个表达式的返回值[ebp-0E8h]=2,而第一次入栈的是第一个表达式的返回值i的值(此时已经改为3),故输出栈里面是【3,2】,打印输出 2,3

后置返回值:缓存区的值

前置返回的值:变量本身的值

在处理后置时:是将值放入临时量中,在输出时直接从临时量中取值

在处理前置时:是等运算完成后,直接从I的地址中取值

另外本身的值可能受另一个表达式的影响,所以,在没有计算完之前,是不知道i的值的。

自己的语言解释

int i=0;
printf("%d,%d,%d,%d\n",i++,--i,++i,i++)

输出值 为 1220

计算时 从右向左计算 i前面带有符号(++/ - -)的 计算时 先不赋值 i后面有符号(++/- -)的 直接把当前计算的缓冲区的值赋给它 最后返回的i地址的值 把这个值给"带有符号(++/ - -)的"的项

其中 正负号问题 最后加在数字前面即可

float 保留的数字 八位(带有小数点) 数字最后一位是四舍五入的 有效

非运算符!

操作对象结果为真时,运算结果为假,例如此题做一次循环,判读条件时为假就退出循环‘

在这里插入图片描述

||运算在第一个操作数不为0的情况下不会计算第二个操作数

程序类型

在这里插入图片描述

数据类型

在这里插入图片描述

格式字符串输出精度

d

在这里插入图片描述

在这里插入图片描述

c

f

在这里插入图片描述

e

在这里插入图片描述

e

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值