<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言邏輯運算符有哪些

    時間:2025-09-04 03:14:16 C語言 我要投稿

    C語言邏輯運算符有哪些

      在高中數學中,我們學過邏輯運算,例如p為真命題,q就假命題,那么“p且q”為假,“p或q”為真,“非q”為真。關于C語言邏輯運算符你了解多少呢?

      C語言邏輯運算符有哪些 篇1

      在C語言中,也有類似的邏輯運算:

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

      邏輯運算的值

      1) 與運算(&&)

      參與運算的兩個量都為真時,結果才為真,否則為假。例如:

      (5>0) && (4>2)

      由于5>0為真,4>2也為真,相與的結果也為真。

      2) 或運算(||)

      參與運算的兩個量只要有一個為真,結果就為真。 兩個量都為假時,結果為假。例如:

      (5>0) || (5>8)

      由于5>0為真,相或的結果也就為真。

      3) 非運算(!)

      參與運算量為真時,結果為假;參與運算量為假時,結果為真。例如:

      !(5>0)

      的.結果為假。

      注意:在邏輯運算中,0 為假,非 0 值都是真,例如5為真,2*3為真。對于表達式(3+5)&&(9>3),由于3+5=8為真,9>3為真,所以結果也為真。

      優先級

      邏輯運算符和其它運算符優先級從低到高依次為:賦值運算符(=) < &&和|| < 關系運算符 < 算術運算符 < 非(!)

      “&&”和“||”低于關系運算符,“!”高于算術運算符。

      按照運算符的優先順序可以得出:

      a>b && c>d 等價于 (a>b)&&(c>d)

      !b==c||d

      a+b>c&&x+yc)&&((x+y)

      另外,邏輯表達式也可以嵌套使用,例如a>b && b || 9>c,a || c>d && !p。

      邏輯運算符舉例:

      #include int main(){char c='k';int i=1,j=2,k=3;float x=3e+5,y=0.85;printf( "%d,%d ", !x*!y, !!!x );printf( "%d,%d ", x||i&&j-3, i

      運行結果:

      0,0

      1,0

      0,1

      本例中!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

      C語言邏輯運算符有哪些 篇2

      c語言中邏輯或的用法的用法如下:

      一、賦值運算符

      賦值語句的作用是把某個常量或變量或表達式的值賦值給另一個變量。符號為‘=’。這里并不是等于的意思,只是賦值,等于用‘==’表示。

      注意:賦值語句左邊的變量在程序的其他地方必須要聲明。

      得已賦值的變量我們稱為左值,因為它們出現在賦值語句的左邊;產生值的表達式我們稱為右值,因為她它們出現在賦值語句的右邊。常數只能作為右值。

      例如:

      count=5;

      total1=total2=0;

      第一個賦值語句大家都能理解。

      第二個賦值語句的意思是把0同時賦值給兩個變量。這是因為賦值語句是從右向左運算的,也就是說從右端開始計算。這樣它先total2=0;然后total1=total2;那么我們這樣行不行呢?

      (total1=total2)=0;

      這樣是不可以的,因為先要算括號里面的,這時total1=total2是一個表達式,而賦值語句的左邊是不允許表達式存在的。

      二、算術運算符

      在C語言中有兩個單目和五個雙目運算符。

      符號 功能

      + 單目正

      - 單目負

      *乘法

      / 除法

      % 取模

      + 加法

      - 減法

      下面是一些賦值語句的例子, 在賦值運算符右側的表達式中就使用了上面的算術運算符:

      Area=Height*Width;

      num=num1+num2/num3-num4;

      運算符也有個運算順序問題,先算乘除再算加減。單目正和單目負最先運算。

      取模運算符(%)用于計算兩個整數相除所得的余數。例如:

      a=7%4;

      最終a的結果是3,因為7%4的余數是3。

      那么有人要問了,我要想求它們的商怎么辦呢?

      b=7/4;

      這樣b就是它們的商了,應該是1。

      也許有人就不明白了,7/4應該是1.75,怎么會是1呢?這里需要說明的是,當兩個整數相除時,所得到的結果仍然是整數,沒有小數部分。要想也得到小數部分,可以這樣寫7.0/4或者7/4.0,也即把其中一個數變為非整數。

      那么怎樣由一個實數得到它的整數部分呢?這就需要用強制類型轉換了。例如:

      a=(int) (7.0/4);

      因為7.0/4的值為1.75,如果在前面加上(int)就表示把結果強制轉換成整型,這就得到了1。那么思考一下a=(float) (7/4);最終a的結果是多少?

      單目減運算符相當于取相反值,若是正值就變為負值,若是負數就變為正值。

      單目加運算符沒有意義,純粹是和單目減構成一對用的。

      三、邏輯運算符

      邏輯運算符是根據表達式的值來返回真值或是假值。其實在C語言中沒有所謂的真值和假值,只是認為非0為真值,0為假值。

      符號 功能

      && 邏輯與

      || 邏輯或

      ! 邏輯非

      例如:

      5!3;

      0||-2&&5;

      !4;

      當表達式進行&&運算時,只要有一個為假,總的表達式就為假,只有當所有都為真時,總的式子才為真。當表達式進行||運算時,只要有一個為真,總的值就為真,只有當所有的都為假時,總的式子才為假。邏輯非(!)運算是把相應的變量數據轉換為相應的真/假值。若原先為假,則邏輯非以后為真,若原先為真,則邏輯非以后為假。

      還有一點很重要,當一個邏輯表達式的后一部分的取值不會影響整個表達式的值時,后一部分就不會進行運算了。例如:

      a=2,b=1;

      a||b-1;

      因為a=2,為真值,所以不管b-1是不是真值,總的表達式一定為真值,這時后面的表達式就不會再計算了。

      四、關系運算符

      關系運算符是對兩個表達式進行比較,返回一個真/假值。

      符號 功能

      > 大于

      < 小于

      >= 大于等于

      <= 小于等于

      == 等于

      != 不等于

      這些運算符大家都能明白,主要問題就是等于==和賦值=的區別了。

      一些剛開始學習C語言的人總是對這兩個運算符弄不明白,經常在一些簡單問題上出錯,自己檢查時還找不出來。看下面的代碼:

      if(Amount=123) ……

      很多新人都理解為如果Amount等于123,就怎么樣。其實這行代碼的意思是先賦值Amount=123,然后判斷這個表達式是不是真值,因為結果為 123,是真值,那么就做后面的。如果想讓當Amount等于123才運行時,應該if(Amount==123) ……

      五、自增自減運算符

      這是一類特殊的運算符,自增運算符++和自減運算符--對變量的操作結果是增加1和減少1。例如:

      --Couter;

      Couter--;

      ++Amount;

      Amount++;

      看這些例子里,運算符在前面還是在后面對本身的影響都是一樣的,都是加1或者減1,但是當把他們作為其他表達式的'一部分,兩者就有區別了。運算符放在變量前面,那么在運算之前,變量先完成自增或自減運算;如果運算符放在后面,那么自增自減運算是在變量參加表達式的運算后再運算。這樣講可能不太清楚,看下面的例子:

      num1=4;

      num2=8;

      a=++num1;

      b=num2++;

      a =++num1;這總的來看是一個賦值,把++num1的值賦給a,因為自增運算符在變量的前面,所以num1先自增加1變為5,然后賦值給a,最終a也為5。b=num2++;這是把num2++的值賦給b,因為自增運算符在變量的后面,所以先把num2賦值給b,b應該為8,然后num2自增加1變為 9。

      那么如果出現這樣的情況我們怎么處理呢?

      c=num1+++num2;

      到底是c=(num1++)+num2;還是c=num1+(++num2);這要根據編譯器來決定,不同的編譯器可能有不同的結果。所以我們在以后的編程當中,應該盡量避免出現上面復雜的情況。

      六、復合賦值運算符

      在賦值運算符當中,還有一類C/C++獨有的復合賦值運算符。它們實際上是一種縮寫形式,使得對變量的改變更為簡潔。

      Total=Total+3;

      乍一看這行代碼,似乎有問題,這是不可能成立的。其實還是老樣子,'='是賦值不是等于。它的意思是本身的值加3,然后在賦值給本身。為了簡化,上面的代碼也可以寫成:

      Total+=3;

      復合賦值運算符有下列這些:

      符號 功能

      += 加法賦值

      -= 減法賦值

      *= 乘法賦值

      /= 除法賦值

      %= 模運算賦值

      <<= 左移賦值

      >>= 右移賦值

      &= 位邏輯與賦值

      |= 位邏輯或賦值

      ^= 位邏輯異或賦值

      上面的十個復合賦值運算符中,后面五個我們到以后位運算時再說明。

      那么看了上面的復合賦值運算符,有人就會問,到底Total=Total+3;與Total+=3;有沒有區別?答案是有的,對于A=A+1,表達式A被計算了兩次,對于復合運算符A+=1,表達式A僅計算了一次。一般的來說,這種區別對于程序的運行沒有多大影響,但是當表達式作為函數的返回值時,函數就被調用了兩次(以后再說明),而且如果使用普通的賦值運算符,也會加大程序的開銷,使效率降低。

      七、條件運算符

      條件運算符(?:)是C語言中唯一的一個三目運算符,它是對第一個表達式作真/假檢測,然后根據結果返回兩外兩個表達式中的一個。

      <表達式1>?<表達式2>:<表達式3>

      在運算中,首先對第一個表達式進行檢驗,如果為真,則返回表達式2的值;如果為假,則返回表達式3的值。

      例如:

      a=(b>0)?b:-b;

      當b>0時,a=b;當b不大于0時,a=-b;這就是條件表達式。其實上面的意思就是把b的絕對值賦值給a。

      八、逗號運算符

      在C語言中,多個表達式可以用逗號分開,其中用逗號分開的表達式的值分別結算,但整個表達式的值是最后一個表達式的值。

      假設b=2,c=7,d=5,

      a1=(++b,c--,d+3);

      a2=++b,c--,d+3;

      對于第一行代碼,有三個表達式,用逗號分開,所以最終的值應該是最后一個表達式的值,也就是d+3,為8,所以a=8。對于第二行代碼,那么也是有三個表達式,這時的三個表達式為a2=++b、c--、d+3,(這是因為賦值運算符比逗號運算符優先級高)所以最終表達式的值雖然也為8,但a2=3。

      還有其他的如位邏輯運算符,位移運算符等等,我們等到講位運算時再說明。

      九、優先級和結合性

      從上面的逗號運算符那個例子可以看出,這些運算符計算時都有一定的順序,就好象先要算乘除后算加減一樣。優先級和結合性是運算符兩個重要的特性,結合性又稱為計算順序,它決定組成表達式的各個部分是否參與計算以及什么時候計算。

      下面是C語言中所使用的運算符的優先級和結合性:

      優先級 運算符 結合性

      (最高)()[] -> . 自左向右

      ! ~ ++ -- + -*& sizeof 自右向左

      */ % 自左向右

      + - 自左向右

      << >> 自左向右

      < <=> >= 自左向右

      (最低) , 自左向右

    【C語言邏輯運算符有哪些】相關文章:

    C語言邏輯運算符02-07

    C語言的運算符和表達式有哪些06-27

    C語言輔導:C語言運算符表11-07

    C語言的條件運算符10-19

    C語言條件運算符02-25

    C語言賦值運算符08-25

    C語言關系運算符03-19

    c語言算術運算符03-11

    C語言中的運算符03-07

    • 相關推薦
    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人