當前位置:首頁 » 編程語言 » 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是先賦值後比較