程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言邏輯運算符和表達式學習教程

C語言邏輯運算符和表達式學習教程

編輯:關於C語言
 

C語言中提供了三種邏輯運算符:

  1. &&(與運算)
  2. ||(或運算)
  3. !(非運算)


與運算符(&&)和或運算符(||)均為雙目運算符。具有左結合性。非運算符(!)為單目運算符,具有右結合性。邏輯運算符和其它運算符優先級的關系可表示如下:


“&&”和“||”低於關系運算符,“!”高於算術運算符。
 
按照運算符的優先順序可以得出:

  • a>b && c>d  等價於  (a>b)&&(c>d)
  • !b==c||d<a  等價於  ((!b)==c)||(d<a)
  • a+b>c&&x+y<b  等價於  ((a+b)>c)&&((x+y)<b)

邏輯運算的值

邏輯運算的值也為“真”和“假”兩種,用“1”和“0 ”來表示。其求值規則如下:

1) 與運算(&&)
參與運算的兩個量都為真時,結果才為真,否則為假。例如:
    5>0 && 4>2
由於5>0為真,4>2也為真,相與的結果也為真。

2) 或運算(||)
參與運算的兩個量只要有一個為真,結果就為真。 兩個量都為假時,結果為假。例如:
    5>0||5>8
由於5>0為真,相或的結果也就為真。

3) 非運算(!)
參與運算量為真時,結果為假;參與運算量為假時,結果為真。例如:
    !(5>0)
的結果為假。

雖然C編譯在給出邏輯運算值時,以“1”代表“真”,“0 ”代表“假”。但反過來在判斷一個量是為“真”還是為“假”時,以“0”代表“假”,以非“0”的數值作為“真”。例如:
        由於5和3均為非“0”因此5&&3的值為“真”,即為1。
又如:
        5||0的值為“真”,即為1。
 

邏輯表達式

邏輯表達式的一般形式為:
    表達式  邏輯運算符  表達式
其中的表達式可以又是邏輯表達式,從而組成了嵌套的情形。例如:
    (a&&b)&&c
根據邏輯運算符的左結合性,上式也可寫為:
    a&&b&&c
邏輯表達式的值是式中各種邏輯運算的最後值,以“1”和“0”分別代表“真”和“假”。

【例5-2】

復制純文本新窗口
 
  1. #include <stdio.h>
  2. int main(void){
  3. char c='k';
  4. int i=1,j=2,k=3;
  5. float x=3e+5,y=0.85;
  6. printf( "%d,%d\n", !x*!y, !!!x );
  7. printf( "%d,%d\n", x||i&&j-3, i<j&&x<y );
  8. printf( "%d,%d\n", i==5&&c&&(j=8), x+y||i+j+k );
  9. return 0;
  10. }
#include <stdio.h>
int main(void){
    char c='k';
    int i=1,j=2,k=3;
    float x=3e+5,y=0.85;
    printf( "%d,%d\n", !x*!y, !!!x );
    printf( "%d,%d\n", x||i&&j-3, i<j&&x<y );
    printf( "%d,%d\n", i==5&&c&&(j=8), x+y||i+j+k );
    return 0;
}

    
本例中!x和!y分別為0,!x*!y也為0,故其輸出值為0。由於x為非0,故!!!x的邏輯值為0。對x|| i && j-3式,先計算j-3的值為非0,再求i && j-3的邏輯值為1,故x||i&&j-3的邏輯值為 1。對i<j&&x<y式,由於i<j的值為1,而x<y為0故表達式的值為1,0相與,最後為0,對i==5&&c&&(j=8)式,由於i==5為假,即值為0,該表達式由兩個與運算組成,所以整個表達式的值為0。對於式x+ y||i+j+k由於x+y的值為非0,故整個或表達式的值為1。

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved