C 賦值運算子與賦值表示式

2021-08-04 21:33:16 字數 2842 閱讀 5359

賦值符號「=」就是賦值運算子,它的作用是將乙個資料賦給乙個變數。如「a=3」的作用是執行一次賦值操作(或稱賦值運算)。把常量3賦給變數a。也可以將乙個表示式的值賦給乙個變數。

如果賦值運算子兩側的型別不一致,但都是數值型或字元型時,在賦值時會自動進行型別轉換。

1)  將浮點型資料(包括單、雙精度)賦給整型變數時,捨棄其小數部分。

2)  將整型資料賦給浮點型變數時,數值不變,但以指數形式儲存到變數中。

3) 將乙個double型資料賦給float變數時,要注意數值範圍不能溢位。

4)  字元型資料賦給整型變數,將字元的ascii碼賦給整型變數。

5) 將乙個int、short或long型資料賦給乙個char型變數,只將其低8位原封不動地送到char型變數(發生截斷)。例如

short int i=289;

char c;

c=i; //將乙個int型資料賦給乙個char型變數

賦值情況見圖2.8。為方便起見,以乙個int型資料佔兩個位元組(16位)的情況來說明。

圖2.8

6) 將signed(有符號)型資料賦給長度相同的unsigned(無符號)型變數,將儲存單元內容原樣照搬(連原有的符號位也作為數值一起傳送)。

【例2.5】將有符號資料傳送給無符號變數。

複製純文字新視窗

#include

using namespace std;

int main( )

#include using namespace std;

int main( )

{ unsigned short a;

short int b=-1;

a=b;

cout<<"a="《執行結果為

a=65535

賦給b的值是-1,怎麼會得到65535呢?請看圖2.9所示的賦值情況。

圖2.9

-1的補碼形式為1111111111111111(即全部16個二進位制位均為1),將它傳送給a,而a是無符號型變數,16個位全1是十進位制的65535。如果b為正值,且在0~32767之間,則賦值後數值不變。

不同型別的整型資料間的賦值歸根結底就是一條:按儲存單元中的儲存形式直接傳送。

c和c++使用靈活,在不同型別資料之間賦值時,常常會出現意想不到的結果,而編譯系統並不提示出錯,全靠程式設計師的經驗來找出問題。這就要求程式設計人員對出現問題的原因有所了解,以便迅速排除故障。

在賦值符「=」之前加上其他運算子,可以構成復合的運算子。如果在「=」前加乙個「+」運算子就成了復合運算子「+=」。例如,可以有

a+=3  等價於  a=a+3

x*=y+8等價於  x=x*(y+8)

x%=3  等價於  x=x%3

以「a+=3」為例來說明,它相當於使a進行一次自加3的操作。即先使a加3,再賦給a。同樣,「x*=y+8」的作用是使x乘以(y+8),再賦給x。

為便於記憶,可以這樣理解:

a+= b(其中a為變數,b為表示式)

a+= b (將有下劃線的「a+」移到「=」右側)

a = a + b  (在「=」左側補上變數名a)

注意,如果b是包含若干項的表示式,則相當於它有括號。如

x %= y+3

x %= (y+3)

x = x%(y+3)(不要錯認為x=x%y+3)

凡是二元(二目)運算子,都可以與賦值符一起組合成復合賦值符。c++可以使用以下幾種復合賦值運算子:

+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=

其中後5種是有關位運算的。

c++之所以採用這種復合運算子,一是為了簡化程式,使程式精煉,二是為了提高編譯效率(這樣寫法與「逆波蘭」式一致,有利於編譯,能產生質量較高的目標**)。專業的程式設計師在程式中常用復合運算子,初學者可能不習慣,也可以不用或少用。

由賦值運算子將乙個變數和乙個表示式連線起來的式子稱為「賦值表示式」。它的一般形式為:

《變數》 《賦值運算子》 《表示式》

如「a=5」是乙個賦值表示式。對賦值表示式求解的過程是:先求賦值運算子右側的「表示式」的值,然後賦給賦值運算子左側的變數。乙個表示式應該有乙個值。賦值運算子左側的識別符號稱為「左值」(left value,簡寫為lvalue)。並不是任何物件都可以作為左值的,變數可以作為左值,而表示式a+b就不能作為左值,常變數也不能作為左值,因為常變數不能被賦值。

出現在賦值運算子右側的表示式稱為「右值」(right value,簡寫為rvalue)。顯然左值也可以出現在賦值運算子右側,因而左值都可以作為右值。如:

int a=3,b,c;

b=a;// b是左值

c=b;// b也是右值

賦值表示式中的「表示式」,又可以是乙個賦值表示式。如

a=(b=5)

下面是賦值表示式的例子:

a=b=c=5  (賦值表示式值為5,a,b,c值均為5)

a=5+(c=6)(表示式值為11,a值為11,c值為6)

a=(b=4)+(c=6)  (表示式值為10,a值為10,b等於4,c等於6)

a=(b=10)/(c=2) (表示式值為5,a等於5,b等於10,c等於2)

請分析下面的賦值表示式:

(a=3*5)=4*3

賦值表示式作為左值時應加括號,如果寫成下面這樣就會出現語法錯誤:

a=3*5=4*3

因為3*5不是左值,不能出現在賦值運算子的左側。

賦值表示式也可以包含復合的賦值運算子。如

a+=a-=a*a

也是乙個賦值表示式。如果a的初值為12,此賦值表示式的求解步驟如下:

先進行「a-=a*a」的運算,它相當於a=a-a*a=12-144=-132。

再進行「a+=-132」的運算,它相當於a=a+(-132)=-132-132=-264。

賦值運算子和賦值表示式

1 賦值運算子 等於號 就是賦值運算子,它的作用是將乙個資料賦給乙個變數,也可以將乙個表示式的值賦給乙個變數。如,z 1 z x y 2 復合的賦值運算子 在賦值運算子 之前加上其他運算子,可以構成復合的運算子。如 a 3 等價於a a 3 a b 3 等價於a a b 3 a 3 等價於a a 3...

賦值運算子和賦值表示式

簡單賦值運算子和表示式,簡單賦值運算子記為 由 連線的式子稱為賦值表示式。其一般形式為 變數 表示式 例如 x a b w sin a sin b y i j 賦值表示式的功能是計算表示式的值再賦予左邊的變數。賦值運算子具有右結合性。因此 a b c 5 可理解為 a b c 5 在其它高階語言中,...

賦值運算子 邏輯運算子 表示式

賦值運算子 num 1 等價於 num num 1 num 1 等價於 num num 1 num 2 等價於 num num 2 num 2 等價於 num num 2 num 2 等價於 num num 2 整除 num 2 等價於 num num 2 餘數 num 2 等價於 num num ...