⑴ 关于c语言的自增\减的优先级
自增的优先级要比×高
i=a++*5等价于i=(a++)*5,由于a++中的++在a的后面,所以表达式a++的值为没有加1前的a的值,所以表达式i=a++*5实际上等价于
i=a*5;
a++;
所以结果是40
i=++a*5等价于i=(++a)*5,由于++a中的++在a的前面,所以表达式++a的值为加1后a的值,所以表达式i=a++*5实际上等价于
++a;
i=a*5;
所以结果是45
⑵ C语言,自增与优先级问题
二进制"|"运算规则
0 | 0 = 0, 0 | 1 = 1, 1 | 0 = 1, 1 | 1 = 1
于是
10|10=10
10|01=11
100|001=101
101|010=111
以此类推。
先算++y;
y就等于2
再算y|t
y|t等价于2|2等价于(二进制)10|10等于(二进制)10等于(十进制)2
⑶ C语言中赋值和自增同时参与运算的优先级如何确定
赋值优先级最低,但括号优先级最高,先做括号里面的赋值,然后处理前缀自增运算,下面是处理乘法,最后处理最左边的赋值。
⑷ 关于c语言的自增\减的优先级
三楼的,结果不是1,0;是0,0吧
这个程序不能说明优先级的问题,因为在c语言的printf输出语句中,是从右向左执行的。
自增自减高于逻辑非
main()
{
int
a=-1,b=1,c;
c=!a++&&b++;
printf("%d%d",b,c);
}
执行结果是1,0,b的值没变,c=0,则说明是先执行a++再执行!的
这说明自增自减高于逻辑非
⑸ 关于c语言中自增问题
i就不用说了吧,本来就是8,C语言中负号运算符与自加运算符的优先级相同,结合方向是
“自右至左”,表达式-i++就相当于对表达式,-(i++)进行运算,此时自加运算符“++”为后缀运算符,(i++)的值为8,因此-(i++)的值为-8,只是i自增为9,但表达式(i++)的值还是8
i++是表达式先取I的值,然后 i 进行增1运算,而++i则先进行 i 增1运算,,表达式的值也增1
希望能帮到你,我也在搞这个C语言
⑹ c语言中指针运算符*和自增运算符++的优先级
运算符的优先级确定表达式中项的组合。这会影响到一个表达式如何计算。某些运算符比其他运算符有更高的优先级,乘除运算符具有比加减运算符更高的优先级。
例如 x = 7 + 3 * 2,在这里,x 被赋值为 13,而不是 20,因为运算符 * 具有比 + 更高的优先级,所以首先计算乘法 3*2,然后再加上 7。
结合性是指具有相同优先级的操作符的运算顺序,从左至右运算称为左结合,从右至左运算称为右结合。
自增(++)和自减(--)操作符为对象加1或减1操作提供了方便简短的实现方式。它们有前置和后置两种使用形式。到目前为止,我们已经使用过前自增操作,该操作使其操作数加1,操作结果是修改后的值。
C语言运算符是说明特定操作的符号,它是构造C语言表达式的工具。C语言的运算异常丰富,除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。
(6)c语言优先级自增问题扩展阅读
运算符优先级
1、函数计算优先。
2、其次是强制类型转换。
3、自增、自减和取反次之。
4、先乘除再加减。
5、有括号先算括号内的。
6、表达式中出现连续两个运算符时最好用空格隔开,如a+++b要写成:a++ +b或a+ ++b。同一优先级的运算符,运算次序由结合方向所决定。
⑺ C语言自增自减问题
其实呢,各个编译器对这个问题的处理方式是不同的。
要弄明白这个问题,首先得明确两点:
1、括号运算符的优先级是最高的,高于自增自减运算和加减乘除运算。因此括号内的表达式首先计算;
2、++i这个自增表达式的意思是i的值加1,然后再使用i。(++i)就表示先把i的值加1,然后再将i用在运算中。
因此。p=(++x)+(++x)+(++x);这个语句最终在本质上是p=i+i+i。而不是你认为的每次算出括号表达式中的结果然后依次相加。这一点非常重要。
而至于最终的p=i+i+i中i的值是多少呢,不同的编译器之间就产生了分歧。
其中vc和gcc认为按照加号运算从左到右的运算顺序来。也就是先计算第一个加法,然后再计算第二个。具体的过程就是:
先计算第一个(++i),这个时候i自增成6,得到i;
再计算第二个(++i),这个时候i自增成7,得到i;
现在i=7了,计算第一个加法(++x)+(++x),也就是i+i,即7+7=14;结果存在临时变量temp中;
然后计算第三个(++i),由于之前i=7,因此现在i自增成8,得到i;
最后计算第二个加法(++x)+(++x)+(++x),也就是temp+i。于是就是14+8=22。
而在TC中则认为必须先把高优先级的计算完再直接计算低优先级运算。于是就是直接先将i进行三次自增,i变成8。然后直接计算i+i+i,所以得到24。
⑻ 关于c语言的自增\减的优先级
自增的优先级要比×高
i=a++*5等价于i=(a++)*5,由于a++中的++在a的后面,所以表达式a++的值为没有加1前的a的值,所以表达式i=a++*5实际上等价于
i=a*5;
a++;
所以结果是40
i=++a*5等价于i=(++a)*5,由于++a中的++在a的前面,所以表达式++a的值为加1后a的值,所以表达式i=a++*5实际上等价于
++a;
i=a*5;
所以结果是45
⑼ 关于C语言自增问题
第一题挺简单的,++优先级是很高的(所有单目运算符的优先级都很高,仅次于扩号),所以要在所有++运算完之后再运算+法,也就是说,在运算+之前,i已经进行了两次自増,由3增到了5,然后再相加,k当然就等于10了。
第二题,你是不是看错题了?或者书印刷错误?这个k的值应该是8啊。C语言采用的是“最长匹配原则”,也就是在保证表达式有意义的前提下,从左到右尽可能多地将字符组成一个运算符,所以i+++(++i)等于是(i++)+(++i);i++是先引用后自増,运算完i++后,i变成4,但是i++表达式的值却是3,然后接着运算++i,这时是先自増后引用,i=4的前提下自増,i就变5了,所以++i的表达式的值是5,然后运算+法,所以之后,k=8,i=5。
⑽ C语言运算符优先级顺序
C语言运算符优先级顺序如下所示:
(10)c语言优先级自增问题扩展阅读
一个表达式可以包含多个运算符。在这种情况下,运算符的优先级决定表达式的哪部分被处理为每个运算符的操作数。例如,按照运算规则,表达式中*、/、以及 % 的优先级比 + 和 - 高。如下列表达式:
a - b * c
相当于 a-(b*c)。如果想让操作数以不同的方式组合在一起,则必须使用括号:
(a - b) * c
如果一个表达式中的两个操作数具有相同的优先级,那么它们的结合律(associativity)决定它们的组合方式是从左到右或是从右到左。例如,算术运算符和操作数的组合方式是从左到右,赋值运算符则是从右到左。