Ⅰ 帮我说说这个c语言的运算顺序吧!拜托了
1、x+=x-=x+x
;
这是赋值运算符,运算顺序是从右到左。即先将x+x的值减赋给x变量(x-=x+x,即x=7-14=-7),再将x+=-7
所以x的最终的值为-7+-7
为-14
2、k=(i=1,++i,i++);
这是将括号中的值计算出来后再赋值给变量k,i=1,++i,i++
从左向右运算,将最后一个表达式的值作为这个逗号运算符组成的表达式的值,该值为2
(但i的值变成3)。所以将2的值赋值给变量k,所以k的值为2
k=i=1,++i,i++;
这个是由逗号运算符组成的表达式语句,先将1赋值给变量i,将变量i的值赋给变量k
(此时i和k的值都为1,表达式2是将i
的值加一个,表达式3的值为2(但i的值变成了3)
Ⅱ c语言运算符顺序问题
首先+和-的优先级比逻辑与和或高所以先做b+c和b-c,b+c=9,b-c=-1,
接着&&优先级比||高所以先做&&部分,由于b+c=9,b-c=-1两个式子的结果没有为0的都为真所以返回1;
而||之前a=3也为真所以最后返回布尔值1,d=1
Ⅲ 请问C语言中 *x++ (*x)++ ++*x *++x的区别
先比较++和*(指针)的优先级,++较高。
那么*x++就是取x指向内存的值,然后x+=1;
(*x)++是x指向内存的值,然后其内存的值自增1。
++*x 是x指向内存的值先自增1,在取该值。
*++x 是x先+=1,在取其指向内存的值。
++跟*的优先级一样,两个若一起出现,运算顺序是从右往左(不是常规的从左往右),所以++*x即++(*x)是先取x的值,然后让值自己加1;(地址没变,指针指向的值变了。)
*++x即*(++x),先让x的自己加1,就是x的地址加上这个指针类型的步长(比如说这个指针是int类型,那它的地址+4,),然后再取x的值。(地址变了,但是值没变)
(3)c语言x和x的运算顺序扩展阅读:
基本数据类型
void:声明函数无返回值或无参数,声明无类型指针,显示丢弃运算结果。(C89标准新增)
char:字符型类型数据,属于整型数据的一种。(K&R时期引入)
int:整型数据,表示范围通常为编译器指定的内存字节长。(K&R时期引入)
float:单精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
double:双精度浮点型数据,属于浮点数据的一种。(K&R时期引入)
Bool:布尔型(C99标准新增)
Complex:复数的基本类型(C99标准新增)
Imaginary:虚数,与复数基本类型相似,没有实部的纯虚数(C99标准新增)
Generic:提供重载的接口入口(C11标准新增)
类型修饰关键字
short:修饰int,短整型数据,可省略被修饰的int。(K&R时期引入)
long:修饰int,长整型数据,可省略被修饰的int。(K&R时期引入)
long long:修饰int,超长整型数据,可省略被修饰的int。(C99标准新增)
signed:修饰整型数据,有符号数据类型。(C89标准新增)
unsigned:修饰整型数据,无符号数据类型。(K&R时期引入)
restrict:用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式。
Ⅳ C语言运算符优先级顺序
C语言运算符优先级顺序如下所示:
(4)c语言x和x的运算顺序扩展阅读
一个表达式可以包含多个运算符。在这种情况下,运算符的优先级决定表达式的哪部分被处理为每个运算符的操作数。例如,按照运算规则,表达式中*、/、以及 % 的优先级比 + 和 - 高。如下列表达式:
a - b * c
相当于 a-(b*c)。如果想让操作数以不同的方式组合在一起,则必须使用括号:
(a - b) * c
如果一个表达式中的两个操作数具有相同的优先级,那么它们的结合律(associativity)决定它们的组合方式是从左到右或是从右到左。例如,算术运算符和操作数的组合方式是从左到右,赋值运算符则是从右到左。
Ⅳ 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。
五级运算符:“ * ” 乘法运算符。
六级运算符:“ + ”加法运算符。
七级运算符:<< 左移运算符;>> 右移运算符。
八级运算符:<、<=、>、>=关系运算符。
九级运算符:“ == ”等于运算符;“ != ”不等于运算符。
十级运算符:“ & ”按位与运算符。
十一级运算符:“ ∧ ”按位异或运算符。
十二级运算符:“ | ”按位或运算符。
十三级运算符:“&&”逻辑与运算符。
十四级运算符:“ || ”逻辑或运算符。
十五级运算符:? :条件运算符。
(5)c语言x和x的运算顺序扩展阅读
C语言中各运算符的结合性:
1、左结合性(自左至右):
例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合方向就称为“左结合性”。
2、右结合性(自右至左)
自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。
Ⅵ c语言,,!x与x!分别表示什么意思
c语言中只有!x没有x!,!x的意思就是x!=0。
!x的意思就是x!=0;当X=0时执行while循环;
!即取反,当X!=0时不执行;若x=0,则!x非零;
若x不等于零,则!x=0;一般用if(!x)来做判断式。
(6)c语言x和x的运算顺序扩展阅读
C语言赋值运算
1、赋值运算符:a=5;
a=b=0;
第一个赋值语句把5赋给变量a;第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,也就是说从右端开始计算,先b=0,然后a=b。
2、复合赋值运算符:a=1;a+=3;
上面第二个赋值语句等价于a=a+3;即a=4。
3、算术运算符:Area=Height*Width;num=num1+num2/num3-num4;
第一个赋值语句Height和Width相乘结果赋给变量Area;第二个赋值语句先完成num2与num3的整除运算,然后与num1相加,再减去num4,结果赋给num。运算符运算顺序先算乘除再算加减。单目正和单目负最先运算。
Ⅶ c语言中,!(--x)什么意思
C语言运算符,括号里面(---x)表示x的值减去1,相当于“x”变为“x-1”,括号外面“!”表示取反(非0数变为0,0变为1)。
除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符,比如位运算符。
(7)c语言x和x的运算顺序扩展阅读
C语言中++*x和*++x的区别
(1)“++“跟“*”的优先级一样,如果两个同时出现,运算顺序是从右往左(不是常规的从左往右)。即“++*x”即“++(*x)”,先取x的值,然后让值自加1。(地址没变,指针指向的值变了)。
(2)“*++x”即“*(++x)”,先让x的自加1,就是x的地址加上这个指针类型的步长(比如说这个指针是int类型,那它的地址+4,以此类推),然后再取x的值。(地址变了,但是值没变)
(3)另外的,int *x,“x”代表的是指针,指针即地址,*是取值符,*x就是取指针x里存的值。
Ⅷ c语言中x++*x++ 的运算顺序是什么
你好~ 首先给你介绍一下c的优先级:
1 () [] . ->
2 ! ~ -(负号) ++ -- &(取变量地址)* (type)(强制类型) sizeof
3 * / %
4 + -
5 >> <<
6 > >= < <=
7 == !=
8 &
9 ^
10 |
11 &&
12 ||
13 ?:
14 = += -= *= /= %= |= ^= &= >>= <<=
15 ,
x++*x++ 首先运算x++然后就是*
Ⅸ c语音中x+++x怎么计算
先计算y=y+x,再计算x=x+1。这是正确过程。不要把运算顺序和优先级混为一谈,C语言表达式运行顺序都是从左至右的,优先级只解决谁与谁结合在一起的问题,比如x=a || b && c;,先取a,接着取||,把a与||右边的表达式进行或运算;但由于&&优先级高于||,这时就把b与c进行与运算,把运算结果和a进行或运算。而不是一开始就先运算优先级高的b && c,再处理a。y+=x++表达式中虽然++的优先级高于+=,但++是后++,要等整个表达式运算结束后才进行增1运算,可见优先级不可能左右运行顺序,只管与谁结合在一起运算。
Ⅹ c语言运算顺序
首先?是一个三目运算符。
格式为:a>b?a:b;意思是a如果前面的逻辑式为真,结果为a,为假结果是b
a=x>0?3*x:x=10;
逻辑运算比赋值运算优先等级更高,所以a=这里就是把后面的结果赋值给a所以这里先看:x>0
已知x=2;所以这里为真;
输出冒号前面的x,x=2。 再把2赋值给a,所以结果是2.