c語言邏輯運算子與自增自減運算子的雜糅運算

2021-04-28 17:36:20 字數 3202 閱讀 3366

1樓:最大的_大寶寶

走|這涉及一個執行流程的問題,當執行到if的時候,一個合理的做法是先選擇走||回的哪條路,然後才是答計算涉及的表示式,這是提高效率的方法,隨之也會帶來所謂的***。如果把式子改為b-- && c++ || a++,結果如你所願,3,0,1。但以書中的例子,(a++ || b-- && c++)把a++計算完成後,發現為真,直接跳轉到後面**了,導致b和c都沒有參與計算,值未被改變。

這個處理方式, 至少從20年前的vc6就是如此了,其他的編譯器是不是遵守這個規矩,以實踐來定。

如圖,cmp判斷a是否為真,為真jne直接跳走,和b、c拜拜了。

2樓:匿名使用者

|邏||

本例最重要的bai原因是‖的運算

du規則:

對於一個||邏zhi輯或來dao說,只要||左邊專的表示式為假(屬即0)才執行||右邊的表示式,如果||左邊表示式已經為真,那麼會造成所謂的「短路」即||右邊的表示式不再執行。

因為a已經完成自加,為真。右邊的計算就都不進行,保持原值。得到答案。

可以參考類似題目的說明:

3樓:匿名使用者

後++的運算子級別很低,所以這題可以這麼理解(a||b)&c;a++,b++,c++;因為c=0,所以為假,也就是執行else語句,懂沒?

4樓:遺失的迷惘

|這個題可以換成下bai面的du形式:

int a=2, b=1, c=0;

if(a++ || (b-- && c++))printf("%d, %d, %d\n",a,b,c);

else

printf("aaa\n");

這樣看著zhi

就比較順眼了dao,在執行運算子

專:||

由於a++ >0因此表示式為真(截斷

屬法則),||右邊的不再執行,也就是(b-- && c++)不再執行。

因此,a=3,b=1,c=0

5樓:青溪半里

優先順序不同,書本上有優先順序的比較,多看看

6樓:lzw我為王

這個很難說,copy隨著時代在進步,bai科技在

發展du,發展的同時就會有淘汰,要想zhi

不被社會dao淘汰,只有不斷的給自己充電,讓自己變得更好更強,那樣就會活的越來越好這個很難說,隨著時代在進步,科技在發展,發展的同時就會有淘汰,要想不被社會淘汰,只有不斷的給自己充電,讓自己變得更好更強,那樣就會活的越來越好了

c語言中自增自減運算子的運算次序?

7樓:匿名使用者

a=a++;

b=++b;

如下圖紅框中所示(gcc編譯時告警),上述兩種用法對編譯器來說是無定義的,

回即是說c語言標準答中沒有規定該怎麼處理,因為實踐過程中也沒人這麼用。

既然沒有標準,又不能說是語法錯誤,那就依賴編譯器實現。a編譯器實現可以讓a = 5,b編譯器實現也可以讓a = 6。因此,在實際專案中,不要寫這樣的語句。

8樓:荌繎丶誑嘢菰漃

後置遞增遞減運

算符,將運算元遞增或遞減1,再將運算元的原值返回,專也就是說有一個臨時

屬變數用來存放原來的值,在完成遞增或遞減操作後,將臨時變數返回。

前置和後置區別就在這,前置返回的是新值,後置返回的是舊值。

9樓:心飛翔

i++是先抄使用i的值,再對i進行加1操作.

所以在p=(i++)+(i++)+(i++)裡面在計算p的值之前,i本身的值總是5.

所以p的值就是3個5所以是15.在運算完p之後,因為有3個i++,所以i做了3次自加運算,所以i最終是8.

q的變化同理.

所以最終列印結果是 15,15,8,8

c語言自增自減運算子用法

10樓:匿名使用者

a+++4等價於(a++)+4 從左到右儘可能多的取運算子

先理解自增自減的含義,他的作用就是使變數加一,這個是不會受到是字首或是字尾的影響的

(a++)+4=7 a=4

11樓:匿名使用者

c語言的抄前置++和後置++,稱為自增運算子前置--和後置--稱為自減運算子,下面以自增運算子的區別來加以介紹,自減類似

如果單獨寫 自增運算子為一個語句,二者沒有區別++i; 和 i++; 都是讓i+1賦值給i但是如果把自增運算子寫入到另外表示式中二者就有很大區別了例如i=5;

j=i++;

執行後i為6,j為5

i=5;

j=++i;

執行後i為6,j為6

12樓:戀心

++a是先自加後操作,a++是先操作後自加,--也類同。

a+++4這種題是很容易混淆的,版而且對於一些運算規則權,不同的編譯系統有不同的規定,不建議樓主使用。

如果是作業題的話,直接用程式執行看看結果是多少就行了。

13樓:

int a[3];

for(i=0;i<3;) scanf("%d",a[i++]);

正確int a[3];

for(i=0;i<3;) scanf("%d",a[++i]);

下標越界

for(i=0;i<3;) scanf("%d",a[i++]);

相當for(i=0;i<3;)即回

for(i=0;i<3;i++) scanf("%d",a[i]);

而for(i=0;i<3;) scanf("%d",a[++i]);

相當for(i=0;i<3;)

所以下答標越界

14樓:匿名使用者

a+++4難道是++4優先????

c語言的自增和自減運算子是算術運算子把?

15樓:匿名使用者

是算術運算子,bai

有前du綴(++i)和字尾zhi(i++)之dao分。前者表示先把值賦給x後再專

加屬1,比如i=2;x=i++,那麼x的值是2,i的值是3。後者表示先加1後再賦值給x,比如i=2;x=++i,那麼x的值是3,i的值是3。

16樓:匿名使用者

是算術運算子,算術運算子有+、-、*、/、%、--、++,其中++和--只針對變數運算

C語言邏輯語言運算順序,C語言邏輯運算子順序是什麼?

a m a b n c d a b 首先是m a b,a b為假,所以m 0.是有一個是0就是假,是有一個為1就為1,所以不短路的條件都看運算子前的,如果 前是0,不運算後面,結果必為0 如果 前是1,不運算後面,結果必為1。所以 m a b n c d 前面的是0,所以必為假,因此 n c d 就...

關於C 中過載自增運算子

這個呼叫的預設拷貝函式 this實際上就是呼叫成 copy員函式的物件地址。如 time1.display 若display 裡有用到this的話,this的值其實為 time1,所以 this time1.time time operator int 這個是後加加的函式原型,後 其實是先儲存值,在...

什麼是邏輯運算子,請問,VB中的邏輯運算子都是什麼意思?

邏輯運算子用來表示日常交流中的 並且 或者 除非 等思想。邏輯運算子 在形式邏輯中,邏輯運算子或邏輯連線詞將語句連線成更復雜的語句。例如,假設有兩個邏輯命題,即 下雨了 和 我在屋裡 可以把它們變成複雜的命題 下雨了,我在屋裡 或 沒下雨 或 如果下雨了,我在屋裡 由兩個語句組成的新語句或命題稱為複...