賦值操作符
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 對於 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。...