程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 第2章 C語言基礎(chǔ)知識(shí)_第1頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 第2章 C語言基礎(chǔ)知識(shí)_第2頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 第2章 C語言基礎(chǔ)知識(shí)_第3頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 第2章 C語言基礎(chǔ)知識(shí)_第4頁
程序設(shè)計(jì)基礎(chǔ)(C語言)教程 課件 第2章 C語言基礎(chǔ)知識(shí)_第5頁
已閱讀5頁,還剩75頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第2章C語言的基礎(chǔ)知識(shí)2.1預(yù)備知識(shí)2.2數(shù)據(jù)類型2.3常量與變量2.4運(yùn)算符和表達(dá)式

2.5運(yùn)算符的優(yōu)先級(jí)及結(jié)合性2.6表達(dá)式的書寫規(guī)則2.7各種數(shù)據(jù)類型的轉(zhuǎn)換

2.1

預(yù)備知識(shí)計(jì)算機(jī)中數(shù)的表示及進(jìn)制轉(zhuǎn)換數(shù)碼、基與權(quán)數(shù)碼:表示數(shù)的符號(hào)基:數(shù)碼的個(gè)數(shù)權(quán):每一位所具有的值數(shù)制<>各種進(jìn)制之間的轉(zhuǎn)換二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制方法:按權(quán)位展開,相加<>各種進(jìn)制之間的轉(zhuǎn)換(整數(shù))二進(jìn)制、八進(jìn)制、十六進(jìn)制轉(zhuǎn)換成十進(jìn)制方法:按權(quán)位展開,相加十進(jìn)制轉(zhuǎn)換成二進(jìn)制、八進(jìn)制、十六進(jìn)制原理:方法:連續(xù)除以基,從低到高記錄余數(shù),直至商為0例把十進(jìn)制數(shù)59轉(zhuǎn)換成二進(jìn)制數(shù)5922921427232120(59)10=(111011)2110111111011余余余余余余例把十進(jìn)制數(shù)159轉(zhuǎn)換成八進(jìn)制數(shù)1598198280(159)10=(237)8237余7余3余2例把十進(jìn)制數(shù)459轉(zhuǎn)換成十六進(jìn)制數(shù)4591628161160(459)10=(1CB)161CB余11余12余1二進(jìn)制與八進(jìn)制之間的轉(zhuǎn)換二進(jìn)制轉(zhuǎn)換成八進(jìn)制:從右向左,每3位一組(不足3位左補(bǔ)0),轉(zhuǎn)換成八進(jìn)制八進(jìn)制轉(zhuǎn)換成二進(jìn)制:用3位二進(jìn)制數(shù)代替每一位八進(jìn)制數(shù)例(1101001)2=(001,101,001)2=(151)8例(246)8=(010,100,110)2=(10100110)2000~0001~1010~2011~3100~4101~5110~6111~7<>在C語言中,可以這樣表示:0151=(151)8、0246=

(246)8二進(jìn)制與十六進(jìn)制之間的轉(zhuǎn)換二進(jìn)制轉(zhuǎn)換成十六進(jìn)制:從右向左,每4位一組(不足4位左補(bǔ)0),轉(zhuǎn)換成十六進(jìn)制十六進(jìn)制轉(zhuǎn)換成二進(jìn)制:用4位二進(jìn)制數(shù)代替每一位十六進(jìn)制數(shù)例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)20000~00001~10010~20011~30100~40101~50110~60111~71000~81001~91010~A1011~B1100~C1101~D1110~E1111~F<>在C語言中,可以這樣表示:0x357D=(357D)16,0x4B9E=(4B9E)16字節(jié)和位內(nèi)存以字節(jié)為單元組成每個(gè)字節(jié)有一個(gè)地址一個(gè)字節(jié)一般由8個(gè)二進(jìn)制位組成每個(gè)二進(jìn)位的值是0或101234567012345678910……...<>7643251數(shù)值的表示方法——原碼、反碼和補(bǔ)碼原碼:最高位為符號(hào)位,其余各位為數(shù)值本身的絕對(duì)值反碼:正數(shù):反碼與原碼相同負(fù)數(shù):符號(hào)位為1,其余位對(duì)原碼取反補(bǔ)碼:正數(shù):原碼、反碼、補(bǔ)碼相同負(fù)數(shù):最高位為1,其余位為原碼取反,再對(duì)整個(gè)數(shù)加13126912457810119-5=49+7=16=(14)12<>原碼反碼補(bǔ)碼+7000001110000011100000111-7100001111111100011111001+0000000000000000000000000-0100000001111111100000000數(shù)的范圍01111111~11111111(-127~+127)01111111~10000000(-127~+127)01111111~10000000(-128~+127)(用一字節(jié)表示數(shù))負(fù)數(shù)補(bǔ)碼轉(zhuǎn)換成十進(jìn)制數(shù):最高位不動(dòng),其余位取反加1例補(bǔ)碼:11111001

取反:10000110

加1:10000111=-7<>2.2

數(shù)據(jù)類型數(shù)據(jù)類型總表<>C數(shù)據(jù)類型基本類型非基本類型指針類型(*)空類型(void)字符類型char枚舉類型(enum)整型(short/int/long)實(shí)型(浮點(diǎn)型)單精度型(float)雙精度型(double)數(shù)組類型([])結(jié)構(gòu)體(struct[...]共用體union[...]數(shù)據(jù)類型決定:1.數(shù)據(jù)占內(nèi)存字節(jié)數(shù)2.數(shù)據(jù)取值范圍3.其上可進(jìn)行的操作基本數(shù)據(jù)類型類型符號(hào)關(guān)鍵字?jǐn)?shù)的表示范圍所占位數(shù)整型字符型實(shí)型有無(signed)

int16-32768~32767(signed)

short16-32768~32767(signed)

long32-2147483648~214748364716unsigned

int0~65535320~4294967295unsigned

longunsigned

short160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255說明:數(shù)據(jù)類型所占字節(jié)數(shù)隨機(jī)器硬件不同而不同,下表以IBMPC機(jī)為例2.3常量與變量2.3.1標(biāo)識(shí)符定義:用來標(biāo)識(shí)變量、常量、函數(shù)等的字符序列組成:只能由字母、數(shù)字、下劃線組成,且第一個(gè)字母必須是字母或下劃線大小寫敏感不能使用關(guān)鍵字

討論:判斷下列標(biāo)識(shí)符號(hào)合法性sum Sum M.D.John day Date 3daysstudent_name #33 lotus_1_2_3 char a>babove$123_toDayM.D.John3days#33char$123a>b長度:TurboC中最長32個(gè)字符命名原則:見名知意,采用簡潔有含義的英文單詞(或縮寫)不宜混淆如1與L,o與0

標(biāo)識(shí)符命名實(shí)例stu_name,sum,total,day,count,sort關(guān)鍵字

關(guān)鍵字是被C語言保留、具有特定含義,并且不能用于其他用途的一批標(biāo)識(shí)符,用戶只能按規(guī)定使用它們。根據(jù)ANSI的標(biāo)準(zhǔn),C語言中的關(guān)鍵字如圖所示。charshortintunsignedlongfloatdoublestructunionvoidenumsignedconstvolatiletypedefautoregisterstaticexternbreakcasecontinuedefaultdoelseforgotoifreturnswitchwhilesizeof2.3.2

常量與符號(hào)常量常量是指在程序運(yùn)行過程中其值不能改變的量。<>常量直接常量符號(hào)常量(需要定義)字符型常量數(shù)值常量整型常量實(shí)型常量字符常量字符串常量直接常量在程序運(yùn)行過程中,其值不能改變的量稱為常量常量可為任意數(shù)據(jù)類型直接常量(字面常量)整型常量:

12、0、-3、10L、0x10、010、039(×)實(shí)型常量:

4.6、-1.23、2.5e-5、.33、0.、E7(×)、字符型常量:'a'、'0'、'+'、't'、'\105'、'x10'、“a”(×)字符串常量:“Hello”、“GoodMorning!”ASCII碼表注意:指數(shù):在計(jì)算機(jī)中用字母E(或e)表示以10為底的指數(shù)。一般格式:aEn或aen,代表a×10n(其中a為十進(jìn)制數(shù),n為十進(jìn)制整數(shù))hello\0內(nèi)存中存儲(chǔ)形式:符號(hào)常量:標(biāo)識(shí)符代表常量定義格式:#define<符號(hào)常量名><常量>

符號(hào)常量定義舉例

#definePI

3.1415926 #defineSTAR

‘*’說明:(3)符號(hào)常量一般使用大寫英文字母表示,以區(qū)別一般用于小寫字母表示的變量。說明:(1)#define是一條預(yù)處理命令(必須以#開頭),又稱“宏定義命令”。(2)#define命令行的最后不能加分號(hào)。符號(hào)常量使用例符號(hào)常量舉例#include<stdio.h>#definePRICE30main(){intnum,total;num=10;total=num*PRICE;printf("total=%d",total);}運(yùn)行結(jié)果:total=300符號(hào)常量的使用能給程序員帶來哪些好處?變量其值可以改變的量稱為變量變量也可以為任意數(shù)據(jù)類型變量定義的一般格式數(shù)據(jù)類型變量1[,變量2,…,變量n];決定分配字節(jié)數(shù)和數(shù)的表示范圍變量定義舉例:inta,b,c;floatdata;變量的使用:作強(qiáng)制定義,也就是“先定義,后使用”例1intstudent;stadent=19;//Undefinedsymbol‘stadent’infunctionmain

例2floata,b,c;c=a%b;//Illegaluseoffloatingpointinfunctionmain

整型數(shù)據(jù)整型常量形式表示方式舉例十進(jìn)制整數(shù)由數(shù)字0-9和正負(fù)號(hào)表示123,-456,0八進(jìn)制整數(shù)由數(shù)字0開頭,后跟數(shù)字0~7表示0123,011十六進(jìn)制整數(shù)由0x開頭,后跟0~9,a~f,A~F表示0x123,0Xff問題:0123=()100x123=()100Xff=()1083291255整型變量整型變量在內(nèi)存中以二進(jìn)制的形式存放根據(jù)占用的字節(jié)數(shù)不同,分為不同類別TurboC2.0編譯系統(tǒng)[signed]

int返回VisualC++2010編譯系統(tǒng)類型字節(jié)數(shù)值范圍[signed]int4-2147483648~2147483647Unsignedint40~4294967295(即232-1)[signed]short[int]2-32768~32767unsignedshort[int]20~65535(即216-1)long[int]4-2147483648~2147483647unsignedlong[int]40~4294967295(232-1)返回整型變量的定義整型變量定義舉例:inta,b;unsignedshortc,d;longe,f;例:cha3-01.c#include<stdio.h>voidmain(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf("a+u=%d,b+u=%d\n",c,d);}

運(yùn)行結(jié)果:a+u=22,b+u=-14整型數(shù)據(jù)在內(nèi)存中的存放形式數(shù)據(jù)在內(nèi)存中是以二進(jìn)制形式存放的,以補(bǔ)碼表示。

inti,j; /*定義I,j為整型變量*/i=10; /*給i,j賦以整數(shù)10,-10*/j=-10;i

j00000000000010101111111111110110變量3要素:變量名、變量值、變量在內(nèi)存的存儲(chǔ)單元。實(shí)型(浮點(diǎn)型)數(shù)據(jù)實(shí)型常量十進(jìn)制數(shù)形式(必須有小數(shù)點(diǎn),整數(shù)部分為0時(shí)可以省略)0.123.123123.00.0123.

指數(shù)形式(e或E之前必須有數(shù)字;指數(shù)必須為整數(shù))12.3e3123E21.23e4e-5×1.2E-3.5×.e3×規(guī)范化的指數(shù)形式:在字母e(或E)之前的數(shù)據(jù)中,小數(shù)點(diǎn)左邊有且僅有一位非零的數(shù)字。指數(shù)形式實(shí)型常量12.3e3123E21.23e4(規(guī)范化)0.123e-3類型字節(jié)有效數(shù)字/精度(位)數(shù)值范圍float47-3.4×10-39~3.4×1039double815~16-1.7×10-309~3.4×10309返回實(shí)型(浮點(diǎn)型)數(shù)據(jù):與數(shù)學(xué)中的實(shí)數(shù)概念相同,這種數(shù)據(jù)由整數(shù)和小數(shù)兩部分組成。實(shí)型數(shù)據(jù)分為:(1)單精度型:類型聲明符為float(2)雙精度型:類型聲明符為double.實(shí)型(浮點(diǎn)型)數(shù)據(jù)floata;a=111111.111doublea;a=111111.111問題:以下兩段程序代碼,是否有區(qū)別?float:占4字節(jié),提供7位有效數(shù)字double:占8字節(jié),提供15~16位有效數(shù)字字符常量定義:用單引號(hào)括起來的單個(gè)普通字符或轉(zhuǎn)義字符。字符常量的值:該字符的ASCII碼值轉(zhuǎn)義字符:反斜線后面跟一個(gè)字符或一個(gè)代碼值表示如‘a(chǎn)’‘A’‘?’‘\n’‘\101’如‘A'——65,‘a(chǎn)'——97,

‘0'——48,'\n'——10<轉(zhuǎn)義字符及其含義:轉(zhuǎn)義字符含義\n\v\r\a\‘\ddd\t\b\f\\\“\xhh轉(zhuǎn)義字符含義換行垂直制表回車響鈴單引號(hào)3位8進(jìn)制數(shù)代表的字符水平制表退格換頁反斜線雙引號(hào)2位16進(jìn)制數(shù)代表的字符如'\101'-----------'A''\012'-----------'\n''\376'-----------'''\x61'-----------'a''\60'-----------'0''\483'----------(

)例:'A'-------'\101'-------'\x41'--------65例轉(zhuǎn)義字符舉例(ch3_001.c,ch2_004.c)main(){printf("\101\x42C\n");printf("Isay:\"Howareyou?\"\n");printf("\\CProgram\\\n");printf("Turbo\'C\'");}運(yùn)行結(jié)果:(屏幕顯示)ABCIsay:”Howareyou?”\CProgram\Turbo‘C’例main(){printf(“Y\b=\n”);}運(yùn)行結(jié)果:屏幕顯示:=打印機(jī)輸出:¥ASCII碼表注意事項(xiàng):單撇號(hào)中的字符不能是’或者\(yùn)一個(gè)字符占一個(gè)字節(jié),存其對(duì)應(yīng)的ASCII碼思考:'9’和9的區(qū)別字符型數(shù)據(jù)可像整數(shù)一樣在程序中參與相關(guān)的運(yùn)算‘a(chǎn)’–32結(jié)果為65字符變量字符型的類型聲明符為char,可以分為有符號(hào)和無符號(hào)兩種。字符變量存放字符ASCII碼char與int數(shù)據(jù)間可進(jìn)行算術(shù)運(yùn)算例1a=‘D’;/*a=68;*/x=‘A’+5;/*x=65+5;*/s=‘!’+‘G’/*s=33+71;*/例2/*cha3-002.c*/main(){charc1,c2;c1='a';c2=98;printf(“%d%c\n”,c1,c2);}類型分配的字節(jié)數(shù)數(shù)值范圍[signed]char1-128~127即-2-7~(27-1)unsignedchar10~255即0~(28-1)#include<stdi.h>#definePRICE12.5main(){intnum=3;floattotal;charch1,ch2='D';total=num*PRICE;ch1=ch2-'A'+'a';

printf(“total=%f,ch1=%c\n”,total,ch1);}宏定義變量定義輸出結(jié)果運(yùn)行結(jié)果:total=37.500000,ch1=d例字符串常量定義:用雙引號(hào)(“”)括起來的字符序列存儲(chǔ):每個(gè)字符串尾自動(dòng)加一個(gè)‘\0’作為字符串結(jié)束標(biāo)志字符常量與字符串常量不同hello

\0例字符串“hello”在內(nèi)存中例空串“”\0aa\0例‘a(chǎn)’“a”例:charch;ch=‘A’;例:charch;ch=“A”;沒有字符串變量,用字符數(shù)組存放變量賦初值編譯程序根據(jù)變量定義為其分配指定字節(jié)的內(nèi)存單元…...地址inta=1,b=-3,c;abc2字節(jié)2字節(jié)2字節(jié)地址地址…...內(nèi)存1-3

隨機(jī)數(shù)如果定義了變量,但是沒有對(duì)它賦初值,則它的值是一個(gè)不確定的數(shù)值例main(){intx,y;printf(“%d,%d”,x,y);}如果定義了變量,但是沒有對(duì)它賦初值,則它的值是一個(gè)不確定的數(shù)值。2.4運(yùn)算符和表達(dá)式C運(yùn)算符簡介C運(yùn)算符算術(shù)運(yùn)算符:(+-*/%++--)關(guān)系運(yùn)算符:(<<===>>=!=)邏輯運(yùn)算符:(!&&||)位運(yùn)算符:(<<>>~|^&)賦值運(yùn)算符:(=及其擴(kuò)展)條件運(yùn)算符:(?:)逗號(hào)運(yùn)算符:(,)指針運(yùn)算符:(*&)求字節(jié)數(shù):(sizeof)強(qiáng)制類型轉(zhuǎn)換:(類型)分量運(yùn)算符:(.->)下標(biāo)運(yùn)算符:([])其它:(()-)學(xué)習(xí)運(yùn)算符應(yīng)注意運(yùn)算符功能與運(yùn)算量關(guān)系-要求運(yùn)算量個(gè)數(shù)-要求運(yùn)算量類型運(yùn)算符優(yōu)先級(jí)別結(jié)合方向結(jié)果的類型基本的算術(shù)運(yùn)算符+

加法運(yùn)算或正值運(yùn)算符- 減法運(yùn)算或負(fù)值運(yùn)算符*

乘法運(yùn)算符/

除法運(yùn)算符,求商,兩個(gè)整數(shù)相除結(jié)果為整數(shù)%

模運(yùn)算符,求余,要求兩則均為整型數(shù)據(jù)3+5、+35-2、-33*55/37%4例9/2=-9/2.0=例9%2=-9%2=9%-2=1%10=

9%1=9.9%2=4-4.51-110(

)1取模的余數(shù)符號(hào)由分子(被除數(shù)決定)例題/*cha3-005.c*/算術(shù)表達(dá)式和運(yùn)算符的優(yōu)先級(jí)和結(jié)合性算術(shù)表達(dá)式:用算術(shù)運(yùn)算符和括號(hào)將運(yùn)算對(duì)象連接起來的、符合C語法規(guī)則的式子。求表達(dá)式的值:先按運(yùn)算符的優(yōu)先級(jí)別高低次序執(zhí)行;在一個(gè)運(yùn)算對(duì)象兩則的運(yùn)算符的優(yōu)先級(jí)別相同,則按規(guī)定的“結(jié)合方向”處理。a*b/c-1.5+’a’a–b*c/d自增++、自減運(yùn)算符--作用:使變量值加1或減1種類:前置++i,--i(先執(zhí)行i+1或i-1,再使用i值)后置i++,i--(先使用i值,再執(zhí)行i+1或i-1)

inta=3;intb=++a;intc=a++;近水樓臺(tái)先得月4a值表達(dá)式值a值表達(dá)式值++aa++345444則:a:5,b:4,c:4。j=3;k=++j;j=3;k=j++;j=3;printf(“%d”,++j);j=3;printf(“%d”,j++);a=3;b=5;c=(++a)*b;a=3;b=5;c=(a++)*b;

//k=4,j=4//k=3,j=4//4//3//c=20,a=4//c=15,a=4例注意說明:只能用于變量,不能用于常量或表達(dá)式;結(jié)合方向“自右向左”;優(yōu)先級(jí)別:--++-------->*/%----->+-自增(減)運(yùn)算常用于循環(huán)語句中循環(huán)變量自動(dòng)加(減)1或指針變量,使指針指向下一個(gè)地址5++(×)(a+b)++(×)i++(√)例1解答:

-i++

-(i++)i=3;printf(“%d”,-i++);//-3

例1:-i++i=3;printf(“%d”,-i++);

例2:

i+++j;(i++)+j;解答:理解為(i++)+jC編譯在處理時(shí)盡可能多地(自左而右)將若干個(gè)字符組成一個(gè)運(yùn)算符。有關(guān)表達(dá)式使用中的問題說明表達(dá)式中包含多個(gè)自加、自減運(yùn)算時(shí),很容易出錯(cuò)例1:

如i=3,則k=i++結(jié)果:k=3,i=4例2:

如i=3,則(i++)+(i++)+(i++)結(jié)果:9,i=6例3:

如i=3,則(++i)+(++i)+(++i)結(jié)果:16,i=62.4.2關(guān)系運(yùn)算符和關(guān)系表達(dá)式關(guān)系運(yùn)算符種類:<<=>>===!=結(jié)合方向:自左向右優(yōu)先級(jí)別:低于算術(shù)運(yùn)算符而高于賦值運(yùn)算符<<=>>===!=優(yōu)先級(jí)6(高)優(yōu)先級(jí)7(低)例c>a+b//c>(a+b)a>b!=c//(a>b)!=ca==b<c//a==(b<c)a=b>c//a=(b>c)關(guān)系表達(dá)式的一般格式:表達(dá)式關(guān)系運(yùn)算符表達(dá)式關(guān)系表達(dá)式的值:是邏輯量“真”或“假”,分別用1和0表示。例inta=3,b=2,c=1,d,f;a>b(a>b)==cb+c<ad=a>bf=a>b>c//表達(dá)式值1//表達(dá)式值1//表達(dá)式值0//d=1//f=0C中沒有邏輯型例1若a=0;b=0.5;x=0.3;

則a<=x<=b的值為0例25>2>7>8在C中是允許的,值為0例3inti=1,j=7,a;a=i+(j%4!=0);

則a=2例4‘a(chǎn)’>0結(jié)果為‘A’>100結(jié)果為10例5注意區(qū)分“=”與“==”inta=0,b=1;if(a==b)printf(“aequaltob”);elseprintf(“anotequaltob”);2.4.3邏輯運(yùn)算符和邏輯表達(dá)式邏輯運(yùn)算符種類:&&||!邏輯運(yùn)算真值表ab!a!ba&&ba||b真1假0真1假0假0假0真1真1真1假0假0假0假0假0真1真1假0假0真1真1真1假0真1真1優(yōu)先級(jí)和結(jié)合方向!算術(shù)運(yùn)算符關(guān)系運(yùn)算符&&||賦值運(yùn)算符高低優(yōu)先級(jí):結(jié)合方向:!:從右向左&&:從左向右||:從左向右例a<=x&&x<=b

a>b&&x>ya==b||x==y!a||a>b//(a<=x)&&(x<=b)//(a>b)&&(x>y)//(a==b)||(x==y)//(!a)||(a>b)#include<stdio.h>main(){inta=3,b=0,p,q,s,r;p=s=(!a)&&(a+b)&&(a++);q=s=a||b||b++;printf("p=s=%d,q=s=%d\n",p,q);printf("(p&&(q&&!q))||!(r||(s||!s))=%d\n",(p&&(q&&!q))||!(r||(s||!s)));}運(yùn)算結(jié)果:p=s=0,q=r=1(p&&(q&&!q))||!(r||(s||!s))=0Pressanykeytocontinue.例#include<stdio.h>main(){ charc='k'; inti=1,j=2,k=3; floatx=3e+5,y=0.85; printf("%d,%d\n",!x*!y,!!!x); printf("%d,%d\n",x||i&&j-3,i<j&&x<y); printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);}例運(yùn)算結(jié)果:0,01,00,1eg.寫出以下表達(dá)式1.整型變量m的內(nèi)容是否為偶數(shù)m%2==02.檢查字符變量a的內(nèi)容是否為字母.a>=‘a(chǎn)’&&a<=‘z’||a>=‘A’&&a<=‘Z’2.4.4位運(yùn)算符及其表達(dá)式邏輯運(yùn)算符種類:&(按位與)|(按位或)^(按位異或)~(取反)<<(左移)>>(右移)位運(yùn)算是指按二進(jìn)制位執(zhí)行的運(yùn)算,位運(yùn)算符只能用于整型操作數(shù),即只能用于帶符號(hào)或無符號(hào)的char、short、int與long類型。&(按位與)

雙目運(yùn)算符,功能是參與運(yùn)算的兩數(shù)中各對(duì)應(yīng)的二進(jìn)位執(zhí)行與運(yùn)算。只有對(duì)應(yīng)的兩個(gè)二進(jìn)位均為1時(shí),結(jié)果位才為1;否則為0。參與運(yùn)算的數(shù)以補(bǔ)碼形式出現(xiàn)。例9&5可寫為如下算式:00001001 (9的二進(jìn)制補(bǔ)碼)&00000101

(5的二進(jìn)制補(bǔ)碼)00000001 (1的二進(jìn)制補(bǔ)碼)可見表達(dá)式9&5的值為1。清0操作:例原數(shù)為43,即00101011。另找一個(gè)數(shù)設(shè)為148,即10010100,將二者執(zhí)行按位與運(yùn)算:00101011&10010100

00000000

取一個(gè)數(shù)中某些指定位:例若有一個(gè)整數(shù)a(2字節(jié)),需要取其中的低字節(jié),只需要將a與8個(gè)1按位與即可。a0010110010101100&b0000000011111111c0000000010101100

保留指定位:例有一數(shù)84即01010100需要把其中從左邊算起的第3、4、5、7、8位保留下來,運(yùn)算如下:01010100&00111011

00010000即a=84,b=59,a&b=16。

|(按位或)雙目運(yùn)算符,功能是參與運(yùn)算的兩數(shù)中對(duì)應(yīng)的二進(jìn)位執(zhí)行或運(yùn)算。只要對(duì)應(yīng)的兩個(gè)二進(jìn)位有一個(gè)為1時(shí),結(jié)果位就為1。參與運(yùn)算的兩個(gè)數(shù)均以補(bǔ)碼出現(xiàn)。例9|5的算式如下:00001001|0000010100001101(十進(jìn)制為13)可見9|5=13。

^(按位異或)雙目運(yùn)算符,其功能是參與運(yùn)算的兩個(gè)數(shù)中對(duì)應(yīng)的二進(jìn)位相異或。當(dāng)兩對(duì)應(yīng)的二進(jìn)位相異時(shí),結(jié)果為1。參與運(yùn)算的兩個(gè)數(shù)均以補(bǔ)碼出現(xiàn)。例9^5可寫成如下算式:00001001^0000010100001100(十進(jìn)制為12)使特定位翻轉(zhuǎn):例假設(shè)有二進(jìn)制數(shù)01111010,要使其低4位翻轉(zhuǎn)。即1變0,0變1,可以將其與00001111執(zhí)行異或運(yùn)算。01111010^0000111101110101

與0相異或保留原值:例012^00=01200001010^0000000000001010因?yàn)樵瓟?shù)位中的1與0執(zhí)行異或運(yùn)算得1,0^0得0,故保留原數(shù)

~(取反)單目運(yùn)算符,具有右結(jié)合性。其功能是按位求反參與運(yùn)算數(shù)的各個(gè)二進(jìn)位。例~9的運(yùn)算:~(0000000000001001)結(jié)果為1111111111110110。<<(左移)雙目運(yùn)算符,功能是把<<左邊運(yùn)算數(shù)的各個(gè)二進(jìn)位全部左移<<右邊數(shù)指定的位數(shù),高位丟棄,低位補(bǔ)0。>>(右移)雙目運(yùn)算符,功能是把>>左邊的運(yùn)算數(shù)的各個(gè)二進(jìn)位全部右移>>右邊的數(shù)指定的位數(shù)。例a<<4把a(bǔ)的各個(gè)二進(jìn)位向左移動(dòng)4位。假設(shè)a=00000011(十進(jìn)制3),左移4位后為00110000(十進(jìn)制48)。例

設(shè)a=15,a>>2表示把00001111右移為00000011(十進(jìn)制3)。左移1位相當(dāng)于該數(shù)乘以2,左移兩位相當(dāng)于該數(shù)乘以2*2=4。15<<2=60即乘了4,但此結(jié)論只適用于該數(shù)左移時(shí)被溢出舍棄的高位中不包含1的情況。假設(shè)以一個(gè)字節(jié)(8位)存一個(gè)整數(shù),且a為無符號(hào)整型變量,則a=64時(shí),左移一位時(shí)溢出的是0;而左移2位時(shí),溢出的高位中包含1。有符號(hào)數(shù)在右移時(shí)符號(hào)位將隨同移動(dòng),為正數(shù)時(shí)最高位補(bǔ)0;為負(fù)數(shù)時(shí)符號(hào)位為1,最高位補(bǔ)0或補(bǔ)1取決于編譯系統(tǒng)的規(guī)定(TurboC和很多系統(tǒng)規(guī)定為補(bǔ)1)。2.4.5賦值運(yùn)算符及其表達(dá)式簡單賦值運(yùn)算符“=”作用:將一個(gè)數(shù)據(jù)賦給一個(gè)變量結(jié)合方向:自右向左 優(yōu)先級(jí):14常量或表達(dá)式只能是變量,不能是常量或表達(dá)式例3=x-2*y;a+b=3;例a=3;a=(a+b)*c賦值轉(zhuǎn)換規(guī)則:使賦值號(hào)右邊表達(dá)式值自動(dòng)轉(zhuǎn)換成其左邊變量的類型例1

floatf;inti;i=10;f=i;

f=10.0例2inti;i=2.56;//結(jié)果i=2;賦值表達(dá)式定義:由賦值運(yùn)算符”=”將一個(gè)變量和一個(gè)表達(dá)式連接起來的式子,叫賦值表達(dá)式。一般形式:<變量>=<表達(dá)式>賦值表達(dá)式的值與變量值相等,且可嵌套例:a=b=c=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2)//b=10,c=2,a=5,表達(dá)式值5//b=4,c=6,a=10,表達(dá)式值10//c=6,a=11,表達(dá)式值11//b=5;a=5,表達(dá)式值為5//a,b,c值為5,表達(dá)式值為5復(fù)合的賦值運(yùn)算符

+=-=*=/=%=《=》=&=^=|=a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例:a=12;a+=a-=a*a//a=-264等價(jià)于a=a+(a=a-(a*a))例:inta=2;a%=4-1;a+=a*=a-=a*=3;//a=0等價(jià)于a=a+(a=a*(a=a-(a=a*3)))a-=4a=a-4x/=y++x=x/(y++)x<<=3x=x<<3//a=22.4.6條件運(yùn)算符及其表達(dá)式條件運(yùn)算符一般形式為:表達(dá)式1?表達(dá)式2:表達(dá)式3運(yùn)算規(guī)則:如果“表達(dá)式1”的值為非0(即邏輯真),則運(yùn)算結(jié)果等于“表達(dá)式2”的值,否則,運(yùn)算結(jié)果等于“表達(dá)式3”的值。也就是說,“表達(dá)式2”與“表達(dá)式3”中,只有一個(gè)被執(zhí)行,而不會(huì)全部執(zhí)行。例如:(a>b)?a:b/*返回a和b中較大的數(shù)*/x?1:0/*若x是非0數(shù),返回1,否則返回0*/(score>=60)?’Y’:’N’/*若及格,返回字符‘Y’,否則返回字符‘N’*/條件運(yùn)算符是C語言中唯一的三目運(yùn)算符,要求有3個(gè)操作對(duì)象。2.4.7逗號(hào)運(yùn)算符和表達(dá)式形式:表達(dá)式1,表達(dá)式2,……表達(dá)式n結(jié)合性:從左向右優(yōu)先級(jí):15(最低)逗號(hào)表達(dá)式的值:等于表達(dá)式n的值例1a=3*5,a*4a=3*5,a*4,a+5例2x=(a=3,6*3)x=a=3,6*a例3a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c);例4printf(“%d,%d,%d”,a,b,c);printf(“%d,%d,%d”,(a,b,c),b,c)//a=15,逗號(hào)表達(dá)式值為60//a=15,逗號(hào)表達(dá)式值為20//x=18,賦值表達(dá)式值18//x=3,逗號(hào)表達(dá)式值18//1,2,3//3,2,3//逗號(hào)起分隔作用//逗號(hào)為逗號(hào)運(yùn)算符例:lt2-009.c#include<stdio.h>main(){intx,y=7;floatz=4;x=(y=y+6,y/z);printf("x=%d\n",x);}運(yùn)行結(jié)果:x=32.4.8求字節(jié)運(yùn)算符sizeof運(yùn)算符是一個(gè)求字節(jié)數(shù)運(yùn)算符。它是一個(gè)單目運(yùn)算符,求字節(jié)運(yùn)算的一般形式為:sizeof(數(shù)據(jù)類型名|變量名|常量)功能:返回某數(shù)據(jù)類型、某變量或者某常量在內(nèi)存中的字節(jié)長度。例如:#include<stdio.h>main(){ floatx;chara; printf("%d\n",sizeof(short));

/*輸出字節(jié)數(shù)2*/ printf("%d\n",sizeof(x));

/*輸出字節(jié)數(shù)4*/ printf("%d\n",sizeof(a)); /*輸出字節(jié)數(shù)1*/ printf("%d\n",sizeof(2)); /*輸出字節(jié)數(shù)4*/ printf("%d\n",sizeof(2+3.14)); /*輸出字節(jié)數(shù)8*/}2.5運(yùn)算符的優(yōu)先級(jí)及結(jié)合性優(yōu)先級(jí)運(yùn)算符含義結(jié)合性說明1()圓括號(hào)左結(jié)合括號(hào)優(yōu)先2-(取負(fù)運(yùn)算)++(自增運(yùn)算符)--(自減運(yùn)算符)算術(shù)運(yùn)算符右結(jié)合單目運(yùn)算符(類型名)(表達(dá)式)強(qiáng)制類型轉(zhuǎn)換!邏輯非運(yùn)算符sizeof求字節(jié)運(yùn)算符~(按位取反)位運(yùn)算符3*(乘法)/(除法)%(求余)算術(shù)運(yùn)算符左結(jié)合雙目運(yùn)算符4+(加法)-(減法)5<<左移、>>右移位運(yùn)算符左結(jié)合雙目運(yùn)算符6>(大于)>=(大于等于)<(小于)<=(小于等于)關(guān)系運(yùn)算符左結(jié)合雙目運(yùn)算符7==(等于)!=(不等于)2.5運(yùn)算符的優(yōu)先級(jí)及結(jié)合性優(yōu)先級(jí)運(yùn)算符含義結(jié)合性說明8&(按位與)位運(yùn)算符

左結(jié)合雙目運(yùn)算符9^(按位異或)10|(按位或)11&&(邏輯與)邏輯運(yùn)算符左結(jié)合雙目運(yùn)算符12||(邏輯或)13?:條件運(yùn)算符右結(jié)合三目運(yùn)算符14=、+=、-=、*=、/=、%=、&==、|=、>>=、<<=、^=賦值運(yùn)算符右結(jié)合雙目運(yùn)算符15,逗號(hào)運(yùn)算符左結(jié)合雙目運(yùn)算符2.6表達(dá)式的書寫規(guī)則書寫表達(dá)式應(yīng)注意以下規(guī)則:①在C語言中,所有括號(hào)全部使用圓括號(hào),沒有小括號(hào)、中括號(hào)以及大括號(hào)之分。②C語言表達(dá)式中的乘號(hào)不能省略。例如:數(shù)學(xué)表達(dá)式3[x+2(y+z)]寫成C語言表達(dá)式為:3*(x+2*(y+z))③表達(dá)式中各操作數(shù)和運(yùn)算符應(yīng)在同一水平線上,沒有上下標(biāo)和高低之分。表達(dá)式的書寫規(guī)則用C語言表達(dá)式描述數(shù)學(xué)表達(dá)式1、ax2+by1+c C語言表達(dá)式:a*x*x+b*y1+c2、C語言表達(dá)式:(y-1)/(2*x)或(y-1)/2/x3、a≤x≤b,C語言表達(dá)式:a<=x&&x<=b(關(guān)系運(yùn)算優(yōu)于邏輯運(yùn)算

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論