当前位置:首页 » 编程语言 » C语言自增

C语言自增

发布时间: 2022-01-17 21:12:31

c语言自增自减

在表达式里,像题目这种++,--。在变量前面就是先自增自减再取变量值。在变量后面先取变量值再自增自减。
比如:j=i++;意思就是先取i的值赋值给j,以后i再自增。后面代码也是这个意思。你可用这个思路跟着代码走一遍。

❷ C语言自增自减运算符

楼上说的对,单主要还是要看While的语句,才是循环条件,题目种的,do执行的b的±,while执行a的±,只看a就行,
循环一次a加1,加到0结束循环。
所以a的初值一定要是负数,才有可能加到0,不然死循环
-2可以循环2次,

❸ c语言自增自减问题

我不知道你的程序功能是什么,不过这两个循环的执行次数明显不一样,saw2的是255-0,saw的是0-254。你再检查看看

========================================
水晶说得没错,uchar是无符号的char型,不存在负数,数值小于0的时候就会变成255。所以一直死循环。

❹ c语言自增

因为这依赖于具体的编译软件,不同的便衣软件有不同的自己的规定,而用户却往往被蒙在鼓里。即使用户自己搞清楚了某一种变音软件的运算规则,但是确实的编写好的程序缺少了可移植性,和可读性。如果拿到别的编译软件上进行编译,就会得出不同的结果,所以说像这种有歧义的语句,最好的办法是敬而远之,把它拆分为两个语句或多个语句就可以了。

❺ c语言自增自减

不是

第二个之所以结果是x=17,y=17是输出函数的问题,

printf("x=%d,y=%d\n",x,++x);

先算x,再算x++;当他做完

x++时改变了x的值,结果要输出x的值时输出了17,并不是因为先算x++;

运算符自左向右或自右向左是指多个操作数的情况,如

+是自右向左运算的,a+b+c是先算b+c在将其结果与a相加,而不是向我们平常那

样a+b在将其结果与c相加

很明显的一个例子是

int x=5;
cout<<x+(++x)<<endl;

结果是12,而不是11,因为它先运算了++x,此时x已经变为6了,若从左向右,

则结果是11

❻ c语言自增自减问题。

函数参数的求值顺序是自右向左”更是大错特错。楼主,C语言跟大多数语言一样,没有规定表达式的求值顺序,除了以下几个顺序点:
;(分号,标志一条语句结束)
,(逗号操作符,函数参数列表里面的逗号只起分隔作用,不是逗号操作符)
&&和||(逻辑与,逻辑或)
? : (条件运算符)
()(if,while,for, do..while,以及函数调用)
这些统称为顺序点,它们的求值顺序有规定。我这里只给你说明逗号操作符,其他的不一一作介绍(不然能写一大篇呢),你自己参考相关资料。
逗号表达式最简单的情形如下:
exp1, exp2;
C语言保证exp1在exp2之前求值,并且exp1求值的副作用保证在逗号之前生成。所以象下面这个逗号表达式:
int i = 1;
i++, (i == 2);
最后的值就是1,因为逗号表达式的前半部分i++的副作用(i自增1)在逗号之前已经生成,所以当执行到(i == 2)的时候,i的值已经是2了,所以i == 2成立,(i == 2)的值便作为整个逗号表达式的值。

但是,对函数原型,函数定义,函数调用,C语言里面明确说明,参数列表里面的逗号不是逗号操作符,只起到分隔作用,所以这里的逗号不再是一个顺序点,那它前后的表达式的求值顺序就是任意的,并且所有带副作用的表达式的副作用都要等到下一个顺序点之后才是确定的,也就是说你只有等到下一个顺序点之后,你才能准确得依赖这些表达式产生的副作用。
所以,像这样的函数调用
foo(i++, ++i);是得不到准确的结果的。因为这里逗号不是逗号操作符,所以就算编译器选择的是从左到右的求值顺序,由于C语言不再保证i++的副作用在逗号之前生成,算到++i的时候,都不确定i到底有没有自增1,不确定性就在这里产生了。再者,如果编译器选择的是从右到左求值,同样产生不确定性,这样一来,传进函数foo的两个参数的值就可能不同,那么最后的结果当然也就不同了。你这里一样,printf是一个函数,
printf("%d,%d,%d\n",++i,--i,-i++);
是函数调用,括号内的所有逗号都不是逗号操作符,而只起到分隔参数的作用。所以++i,--i,-i++这三个表达式的求值顺序是任意的,编译器想怎么算就怎么算,不同的编译器的“想法”可能相同可能不同,结果就可能一样可能不一样。这才是楼上的各位得到不同结果的真正原因!!!

楼主要好好参考顺序点的定义和作用,并且牢记下面这条规则:
C语言里面明确指出:在两个顺序点之间两次改变同一个变量的任何尝试得到的结果都是不确定的!
你这里
int i=10;
printf("%d,%d,%d\n",++i,--i,-i++);
的两个顺序点分别是int i=10;的分号,和包围printf的参数的括号,C语言只保证位于两个顺序点之间的表达式求值产生副作用在第二个顺序点之前生成,但不保证两个顺序点之间所有表达式的求值顺序。你这里++i,--i,-i++三个表达式企图在两个顺序点前一个分号和()之间三次改变同一个变量i的值,所以结果注定是不确定的。至于为什么C语言要规定相邻顺序点之间的表达式以任意顺序求值,是为了给编译器更多的自由空间,让底层运算操作能由编译器调度安排从而使运算更有效地执行。
另外,站长团上有产品团购,便宜有保证

❼ C语言自增的运算过程亲求解

这与编译器有关。常见的有两种情况:

  1. b = ++j + ++j + ++j ; 的计算是先计算前2项存入一个临时变量,再计算最后一项,结果是j=4+1,j=5+1,x=j+j=6+6=12;然后,j=6+1,b=x+j=12+7=19。

  2. j=4+1,j=5+1,j=6+1,然后,b=j+j+j=7+7+7=21。

    所以建议你不要纠结这种题。

❽ C语言 自增运算符

++i先加1再用i的值,i++先用i的值再自增1

❾ C语言自增变量条件

没有要求.

有符号,无符号,或者字符型.

进行运算的话,实际上都是 加 1.

❿ C语言自增自减

++i;
是先i=i+1;,然后再取i的值输出
i++;
是先取i的值输出,然后再i=i+1;
负号的优先级比++高,所以i先变-i,也就是-8,所以输出-8,然后再进行i=i+1;

热点内容
linux安装mysqltar 发布:2024-12-26 21:18:02 浏览:313
浏览器的java支持 发布:2024-12-26 21:15:45 浏览:651
电商高管如何配置 发布:2024-12-26 21:13:48 浏览:705
批发的算法 发布:2024-12-26 21:13:46 浏览:204
安卓手机在日本下载哪个导航 发布:2024-12-26 21:09:32 浏览:556
白噪声加密 发布:2024-12-26 20:31:02 浏览:638
怎么防止电脑删除脚本 发布:2024-12-26 20:19:19 浏览:150
输入服务器或许可证文件怎么输 发布:2024-12-26 20:10:40 浏览:160
pythonarcgis 发布:2024-12-26 20:09:48 浏览:699
python初始化变量 发布:2024-12-26 20:05:27 浏览:179