C語言操作符

2021-10-01 18:46:08 字數 3890 閱讀 3850

賦值操作符

int a,b,c;

a = b = c = 10;

賦值操作符是從右向左進行賦值的,因此c先賦值,然後將c的值賦予b,以此類推。

a = 10;

c = a + (b = a + 10);

先給b 賦值20,然後進行計算,得到 c 等於30

#include

intmain

(void

)

所以這個時候也要注意,a值的變化,結果為:

the a value is 15

the b value is 30

我們規定變數作為左值(不能為表示式),常數作為右值

因此下面式子是錯誤的

10 = a; /* illegal. */

a+b = 20; /* illegal. */

int a;

float b;

b = a = 5.5 ;

因為a為整型,在a賦值的時候,它會強制等於5

此時b值為5.00000

在此有乙個地方需要注意:

-= 與 =-

a -= 1 的意思是 a = a - 1

a =-1的意思是a = -1

因此我建議在寫賦值的時候,一定要有空格,方便區分。

算數符號

算術符號主要是: + - * \ %

++ 與 – 操作符

int a = 4;

a++; /* equivalent to a = a+1; */

++a; /* equivalent to a = a+1; */

(a+10)++; /* illegal. */

經常拿來區分的他們在變數的位置問題:

int a = 4, b;

b = a++;

++在a後面,那麼就說明先進行其他操作,最後執行++操作

因此b = 4, a = 5

int a = 4, b;

b = ++a;

++在a前面,那麼就說明先進行執行++操作,然後其他操作

因此b = 5, a = 5

需要注意的是,只要++或者–在當前的語句執行完畢,那麼這個操作就算完成了,也就是說賦值完成。

int a = 4;

++a; // 或者是 a++;

printf("a value is %d\n",a);

列印的結果都是:

a value is 5

乙個相對比較複雜的例子:

#include

intmain

(void

)

結果為 2

首先運算順序是,從右往左,但是都有括號,因此要先計算括號內的數值

(++a) 式子值為 4, a為4

(a–) 式子值為 4,a為3

(–a) 式子值為 2,a為2

然後將值帶入: 4 - 4 + 2 = 2

考慮如果沒有括號將會如何,答案是不變

因為++,–的優先順序比()都高,有沒有()是沒有變化的

關係運算子

包括 > >= < <= == 和 !=, 這些關係運算子的結果只有兩個0 和 1, 0 為假,1 為真。

if(a > 10), 當a = 11時,這個式子成立,得到的結果就是

逗號操作符

逗號的結合律,是從左到右的

#include

intmain

(void

)

b = 20, b = b+30, b++ => 先賦值,再計算b=50,在b++

if(a,b,c)這個地方編譯器會有警告提示,根據逗號的結合律,事實上只有c參與判斷,a,b雖然讀取但是,以最後乙個變數為主。

因此結果為:

50 51

sizeof操作符

sizeof是用來計算特定變數,常量或者表示式儲存值。它的結果是乙個size_t型別,這個型別實際上是乙個無符號整型值。人們通常使用%d,但是更安全的辦法是使用%lu

#include

intmain

(void

)

結果為:

1 4 8

4 4 8

sizeof最經常的用法是在分配記憶體時使用:

malloc(100*sizeof(int));

列舉型別 enum

宣告格式:

enum tag ;

我們也可以使用define來定義別名,但是使用enum更方便

#define mon  1

#define tue 2

#define wed 3

#define thu 4

#define fri 5

#define sat 6

#define sun 7

enum day

;

宣告乙個列舉型別,並不可以直接使用,需要定義一下,如下:

enum day

;enum day day;

定義了day作為列舉day型別。

類似於 int 你是不可以直接使用的,需要定乙個變數 i。 int i;

#include

enum day

;int

main()

void test(enum codes c);  instead of void test(int c);
位操作符

&操作符:

此操作符是雙操作符,即and。

&的運算規則是:只有當前位的都為1的時候,取1,其他都取0

通常我們是用來取低位的數值

int a = 19;

a = a & 3;

| 操作符

此操作符是雙操作符,即or。

&的運算規則是:只要其中一位為1的時候,取1,其他都取0

^操作符

此操作符是雙操作符,即xor。

|的運算規則是:只要雙方不同,取1,其他都取0

~操作符

此操作符是單操作符,即not。

~的運算規則是:為0位,取1,為1位,取0

shift操作符

>> 表示位的右移,《表示位的左移。

位移的值是有範圍的的,比如乙個整型是32bit,那麼它的位移範圍就是0~31,32或者-1都是錯誤的範圍。

unsigned int a, b = 35;

a = b >> 2;

35 is 00100011 向右位移2位,就得到001000。

a = 8,b = 35

因為b只是發生了位移,並沒有對b的值進行修改。

unsigned int a, b = 35;

a = b << 3;

00100011 向左位移3位,就得到00100011000。

實際上,無符號int是有32位,我們只是沒有必要把所有的0都寫出來而已。

在無符號int的數值範圍內,發生左移就是擴大2^n倍

int a = 1;

a <<= 8;

表示位移並賦值。

位移操作一定要注意值型別問題

unsigned char a = 8;

a <<= 4;

結果為:

128char a = 8;

a <<= 4;

結果為:

-128

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...

C語言 , 操作符

例如 define to string s s 將會使編譯器把以下命令 cout to string hello world endl 理解為cout hello world endl 例如 define concatenate x,y x y int xy 10 將會使編譯器把 cout conc...

C語言操作符

操作符的分類 1 算術操作符 2 移位操作符 3 位操作符 4 賦值操作符 5 單目操作符 6 關係操作符 7 邏輯操作符 8 條件操作符 9 逗號表示式 1 算術操作符 1 除了 操作符之外,不能用於浮點數。2 對於 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。...