老湯回味 C語言運算子及型別轉換

2021-08-20 06:46:13 字數 2389 閱讀 3993

算數運算子

算數運算子包括:加(+),減(-),乘(*),除(/),取餘(%),自增(++),自減(--),下面上**,直接看例子。

#include int main(void)

執行結果:

a + b = 12

a - b = 8

a * b = 20

a / b = 5

a % b = 0

a++ = 11, ++a = 12

b-- = 1, --b = 0

c = 12

d = 13

需要說明的有以下幾點:

%運算子只可以用於兩個整型;

a++和++a在列印時沒有差別,但是將其賦值給變數時,存在差別,如上例中的c和d,a++是先將a賦值給變數,之後才會做自增;++a則是自增後將值賦值給變數。--運算子與++運算子類似。

關係運算子

關係運算子用來比較兩個數的大小,包括:等於(==),不等於(!=),大於(>),大於等於(>=),小於(

#include int main(void)

執行結果:

a == b: 0

a != b: 1

a < b: 1

a <= b: 1

a > b: 0

a >= b: 0

可以看到,c語言中使用0和1分別代表false和true。

邏輯運算子

邏輯運算子包括:邏輯與(&&),邏輯或(||),邏輯非(!)。

#include int main(void)

執行結果:

a > b && c > b: 0

a > b || c > b: 1

!(a > b): 1

需要說明的是,邏輯運算子存在短路的機制,比如上面的第一句printf,由於a>b為false,此時邏輯與已經不可能為true,所以後面的c>b將不會執行,也就是說邏輯與會被第乙個為false的條件表示式所阻斷;同理,對於邏輯或,如果前面的條件表示式已經為true,則無論後面的條件表示式為true或者false都對結果無關緊要了,邏輯或將會執行到第乙個為true的條件表示式。

位運算子

位運算子操作整型的位,包括:按位與(&),按位或(|),異或(^),按位取反(~),左移(<>)。

#include int main(void)

執行結果:

a = 0x00000001

b = 0x00000004

a & b: 0x00000000

a | b: 0x00000005

a ^ b: 0x00000005

~a: 0xfffffffe

a << 2: 0x00000004

a >> 1: 0x00000000

a | (1 << 2): 0x00000005

b & ~(1 << 2): 0x00000000

需要說明以下幾點:

左移運算,最高位會移出,低位補0;

右移運算,低位移出,最高位為1,則為1,為0,則為0,即保留符號位;

最後兩條printf語句,用來演示如何給乙個數的第2位置位為1和如何清除乙個數第2位的1。

賦值運算子

主要包括=, +=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=,除了=運算子,其他的都是結合了其他運算子的功能,比如a += 1,就是將a和1相加,再把結果賦值給a,這裡不再贅述。

型別轉換

c語言是強型別語言,不同型別的資料之間進行運算會進行型別的轉換,轉換方式主要有兩種,強制型別轉換和隱式型別轉換。

強制型別轉換是在編碼時通過顯式編寫**,實現的型別轉換;隱式型別轉換則是c語言編譯器自動為我們進行的型別轉換,總的原則是

如果表示式中的資料屬於同乙個大型別,比如都是整型,則資料統一向表示式中寬度最大的轉換,如int向long轉換,有符號型別還會向無符號型別轉換,如int向unsigned int轉換;

整型和浮點型運算,整型會轉換為浮點型。

強制將浮點型轉換為整型,浮點型小數部分丟失。

看乙個簡單的例子

#include int main(void)

執行結果:

c 型別轉換運算子

c 中有4個型別轉換運算子,使裝換過程更規範 dynamic cast type name expression 如果轉型失敗則返回0,即空指標。該運算子的用途是,使得能夠在類層次結構中進行向上轉換 由於 is a關係,這樣的型別轉換時安全的 而不允許其他轉換。二 const cast const ...

C 型別轉換運算子

隱式轉換,是針對不同型別之間的賦值和運算,函式呼叫傳遞引數 這些的轉換都是由編譯器自動完成 char ch int i ch 顯式轉換 由程式設計師在變數前面新增型轉換 char pc char pb void ps void pa 通過上述的兩種方式,c語言大部分的型別轉換都可以順利進行,c 繼承...

C 型別轉換運算子

用於 指向派生類物件的 基類指標轉換成派生類指標。如果轉換失敗,則返回0,即空指標。通過判斷轉換是否成功,來決定是否用派生類裡的函式 基類中可能沒有那個函式 class a class b public a class c public b a a new a a b new b a c new c...