当前位置:首页 » 编程语言 » c语言先赋值再比较
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言先赋值再比较

发布时间: 2023-03-27 14:58:15

‘壹’ c语言中,这个语句是先执行里面的赋值语句再判断while的真假,还是相反

相当于以下顺序:
*t = *s
*s++
*t != 0

‘贰’ C语言文件指针问题

赋值运算符的优先级低于逻辑运算符。
fp = fopen (argv[1], "r") == NULL
实际上是这样的:
fp = ( fopen (argv[1], "r") == NULL),
即先计算后面的逻辑运算,再把逻陵旁辑运算尺薯橡的值赋给fp,所以是错手正误的。
应该修改为:
(fp = fopen (argv[1], "r") )== NULL

‘叁’ C语言字符串赋值与比较问题

#include <string.h>

char szString[10] = "0X9000";
unsigned uiResult = strcmp(str, szString);

返回值若是相等则相同拦饥,若大于0或小于0则是前者大或者后者大

字符串转败衡绝换为整形数用atoi()函数即可转换察姿,貌似是在ctype.h头文件里,需要包含。

‘肆’ C语言,比较操作和赋值操作哪个更快

这个告喊应该这么说,相同的情况下,赋值比比较快.再者:
如果是两个寄存器变量尘友掘相互赋值或派核比较的话,比内存快很多(陪) .

‘伍’ c语言中,逻辑运算和赋值运算哪个优先级高

逻辑运算符的级别高

运算符中具有最高优先级的是那些不参与运算的操作符:例如下标运算符( [] ),函数调用,结构体变量运算符(. ->),颤渗它们的结合方向是自左向右。<别的书没说过。>
接着就是一元运算符,它们在参与运算的操作符中具有最高优先级。因老升为函数调用的优先级高于一元运算符,因此当p为一函数指针时,必须用(*p)( )来调用函数,*p( )则表明p为返回一指针的函数。<C语言就是如此奥妙>一元运算符的结合方向是自右向左,<跟上面相反>因此*p++应与*(p++)<p指针的地址+1里的内容>相同,而不与(*p)++相同。
再接着就是二元运算符,算术运算符在里面具有最高的优先级,再下面是移位运算符,关系运算符,逻辑运算符,条件运算符,赋值运算符,最后是逗号运算符,当判断这些运算符的优先级时,有两点要记住:

1、每个逻辑运算符的优先级低于关系运算符的优先级
2、移位运算符的优先级高于关系运算符,但是低于算术运算符

在不同运算符类别中,没有特别需要注意的地方。乘法、除法、取余具有相同的优侍洞老先级,加法、减法具有相同的优先级,两个移位运算符具有相同的优先级。
有一点要注意的是六个关系运算符具有不相同的优先级:“==”和“!="的优先级比其他四个要低。因此下面的表达式的意思是判断a和b比较结果和c和d的比较结果是否相等。
a < b == c < d <(a<b)==(c<d)>

三元条件运算符的优先级比上面提及的运算符的都要低,这就允许在选择表达式中有关系运算符的逻辑组合,如下所示:

z = a < b && b < c ? d : e
<if((a<b>&&(b<c))
{
Z=d;
}
Else
{
Z=e;
}

上面语句同时也说明了赋值运算符的优先级比关系运算符的低,而且所有的复合赋值运算符具有相同的优先级,并且它们的运算方向是从右到左。因此:

a = b = c

等同于

b = c; a = b;

优先级最低的是逗号运算符,这比较容易理解,因为当一条语句由多个表达式组成时,逗号在这里相当于分号的功能。

在混合优先级判断中,赋值运算符是比较棘手的。考虑下面的例子,它执行的功能是拷贝一个文件:

while (c=getc(in) != EOF)<加个括号>
putc(c,out);

“while”语句中要实现的功能是给变量c赋值,然后与EOF进行比较来终止循环,不幸的是,赋值操作的优先级低于比较操作的优先级,因此c的值是getc(in)与EOF比较的结果,getc(in)的值将被弃掉,因此拷贝生成的文件将是一连串的1。
想实现以上的功能并不困难,可以简单修改如下:

while ((c=getc(in)) != EOF)
putc(c,out);

然而,在复杂语句中,这种优先级混淆的问题是很难被发现的。在UNIX系统下面的几个不同版本的连接程序中曾经出现过如下的错误语句:<赋值在别的地方,为什么在这个地方赋>

if( (t=BTYPE(pt1->aty)==STRTY) || t==UNIONTY ){

此条语句要实现的功能是给变量t赋值,然后判断是否与STRTY相等或者与UNIONTY相等,但是这条语句真正实现的功能并不是这样。

C语言中,逻辑运算符的优先级分配有其历史的原因。B语言,也就是C语言的前身,也有相当于C语言中的 & 和 | 操作符,尽管它们被定义用作位运算符,但是当用于条件上下文时,编译器会自动将它们当作 && 和 || 运算。

C++/C语言的运算符有数十个,运算符的优先级与结合律如表所示。注意一元运算符+ - *的优先级高于对应的二元运算符。

下表中包括了C++所有的操作符,共有16级优先级。表中的操作符如果重复出现,则第1次出现的是单目运算符,第二次出现的的双目运算符。
优先级
运算符
结合律(从高到低排列)

1
() [] -> :: .
左→右

2
! ~ + - ++ -- & * (强制转换类型) sizeof new delete
右→左

3
.* -> *
左→右

4
* / %
左→右

5
+ -
左→右

6
<< >>
左→右

7
< <= >= >
左→右

8
== !=
左→右

9
&
左→右

10
^
左→右

11
|
左→右

12
&&
左→右

13
||
左→右

14
?:
右→左

15
= *= /= += -= |= <<= >>= %= &= ^= &&= ||=
右→左

17
'
左→右

‘陆’ c语言先赋值还是先求和

我回答了前者是先++再赋值,后者是先赋值再
†to

‘柒’ c语言是先赋值再比较吗

else a=c ;(这里是已经把b赋值给a了吗)

‘捌’ C语言问题。如何判断赋值和表示比较相等

第一个,是赋值,第二个也就是两个等号,才表示相等,对于本题目,肯定是第一个

‘玖’ C语言中同等级运算的先后顺序

同等级的运算符,先后顺序按结合性来进行。下面的代码有利于理解结合性。
int a,b=1,c=2;
a=b=c;上面的代码是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。所有的赋值符(包括复合赋值)都具有右结合性,就是在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2。
所有优先级相同的操作符,它们的结合性也相同。这是必须如此的,否则结合性依然无法消除歧义,如果在计算表达式的值时需要考虑结合性,那么最好把这个表达式一分为二或者使用括号。
例:
a=b+c+d=是右结合的,所以先计算(b+c+d),然后再赋值给a
+是左结合的,所以先计算(b+c),然后再计算(b+c)+d
在C语言中有少数运算符在C语言标准中是有规定表达式求值的顺序的:
1:&&

||
规定从左到右求值,并且在能确定整个表达式的值的时候就会停止,也就是常说的短路。
2:条件表达式的求值顺序是这样规定的:
test
?
exp1

exp2;
条件测试部分test非零,表达式exp1被求值,否则表达式exp2被求值,并且保证exp1和exp2两者之中只有一个被求值。
3:逗号运算符的求值顺序是从左到右顺序求值,并且整个表达式的值等于最后一个表达式的值,注意逗号','还可以作为函数参数的分隔符,变量定义的分隔符等,这时候表达式的求值顺序是没有规定的!

‘拾’ 我在自学C语言的过程中遇到这么一个问题:a=b>c,是先赋值还是先比较

a=b>c是先比较后赋值,而(a=b)>c是先赋值后比较