⑴ c语言的运算符问题,前置运算和后置运算我搞不清楚
unsignedcharj,k,i=255;
j=i++;
k=++i;
在上述代码中,后置自增自减运算符是在执行完赋值后再执行的,也就是相当于
j=i;
i=i+1;
而前置自增自减运算符是在赋值前执行的,也就是
i=i+1;
k=i;
因此,j的值应该是255,k应该是1。
#include<stdio.h>
intmain()
{
unsignedcharj,k,i=255;
j=i++;
k=++i;
printf("j=%d,k=%d ",j,k);
return0;
}
前置自增自减运算符和后置自增自减运算符放在一起运算时该怎么判断呢?
inta=0,b=0,c=0;
a=++b+c++;
先执行前置自增自减运算符,再执行赋值,最后执行后置自增自减运算符
inta=0,b=0,c=0;
b=b+1;
a=b+c;
c=c+1;
非常重要的一点!
inta=0;
printf("%d,%d",++a,++a);
这段代码严格来说是错误的!
因为【参数求值顺序】是【未定义】的。
参考CSDN这篇帖子:
http://bbs.csdn.net/topics/370153775
⑵ c语言中前置++、后置++、前置--、后置-- 哪位大神可以帮我解释一下
关于前置++和后置++的区别,你可以看看我写的网络经验。里面有详细的深入分析,以及结论。
http://jingyan..com/article/9f63fb919997f3c8400f0efb.html
前置--和后置--与++是一样的,除了加1和减1的区别外,其他都一样。
⑶ c语言中运算符有哪几种,优先级顺序是怎样
C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。
运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。
一级运算符:标识,常量,字符串文字量,优先级提升表达式最优先执行。
二级运算符:数组下标运算(expression)、函数调用(argument-expression-list)、成员访问(identifier、-> identifier)、后缀自增(i++)、后缀自减(i--)、复合初始化(initializer-list)。
三级运算符:前缀自增(++i)、前缀自减(--i)、单目转型表式式(取地址& ,提领 * , 正号+ ,负号-、位反~ 逻辑否!)、求类型长度(sizeof unary-expression)。
四级运算符:强制表达式成为type-name指定的类型( type-name ) cast-expression。
五级运算符:“ * ” 乘法运算符。
六级运算符:“ + ”加法运算符。
七级运算符:<< 左移运算符;>> 右移运算符。
八级运算符:<、<=、>、>=关系运算符。
九级运算符:“ == ”等于运算符;“ != ”不等于运算符。
十级运算符:“ & ”按位与运算符。
十一级运算符:“ ∧ ”按位异或运算符。
十二级运算符:“ | ”按位或运算符。
十三级运算符:“&&”逻辑与运算符。
十四级运算符:“ || ”逻辑或运算符。
十五级运算符:? :条件运算符。
(3)c语言的后置运算符扩展阅读
C语言中各运算符的结合性:
1、左结合性(自左至右):
例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。
2、右结合性(自右至左)
自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
⑷ C语言自增运算
++是自增运算符,++k或k++都是让变量k的值加1;-
-是自减运算符,-
-k或k-
-都是让变量k减1。运算符位于操作数之前,称为前置运算符;运算符位于操作数之后,称为后置运算符。
这两种运算符的差异是:前置运算符是对变量先递增(递减),然后参与其他运算,即先改变变量的值后使用;后置运算符则是变量先参与其他运算,后对变量递增(递减),即先使用后改变。
比如:int
a=9;
b=a++;(b=9;a=10)
b=++a;(b=10;a=10)
对于你的这道题来说,++i和i++都是一样的;因为都是改变i的值。
还有,printf("%d\n",sum)少写了一个“;”,应该是printf("%d\n",sum);
希望对你有所帮助!
⑸ 在C语言中s[j++]和s[j],j++有什么区别
1、效果是一样的,前者是后者的简化。s[j++]:先执行s[j],然后立马再把j自加一。也就等同于连接着的两条语句s[j],j++的效果。
2、C语言的前置++和后置++,称为自增运算符
前置--和后置--称为自减运算符,下面以自增运算符的区别来加以介绍,自减类似
如果单独写 自增运算符为一个语句,二者没有区别
++i; 和 i++; 都是让i+1赋值给i
但是如果把自增运算符写入到另外表达式中二者就有很大区别了
⑹ 关于运算符中置转后置,C语言高手进!
好麻烦的东西啊
⑺ C语言追加50求解 自增前置运算符和后置谁的优先级高啊,怎么试一下。
后置的优先级高
可以这样实验: 编译器里测试:
int i=0;
++i++;
因为++i返回i,是个左值,i++返回临时值是个右值,如果可以通过编译,那么就是前置++优先级高,如果通不过编译(右值不可以修改),就是后置优先级高
实际测试,通不过编译(vc2015)
写成:
(++i)++; //这样就可以通过编译
⑻ c语言前置运算符和后置运算符的区别
前置先计算 自增、自减
inti=0;
intj=++i;//j=1,i=1
i=0;
j=i++;//j=0,i=1