




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、順序結(jié)構(gòu)3.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.9算術(shù)運(yùn)算符及其表達(dá)式3.10賦值運(yùn)算符及其表達(dá)式3.11順序運(yùn)算符及其表達(dá)式3.12位運(yùn)算符及其表達(dá)式3.13語句概述3.14輸入、輸出3.15程序的錯(cuò)誤類型3.16調(diào)試與測(cè)試3.1一個(gè)簡(jiǎn)單程序的例子華氏溫度
攝氏溫度算法:
1.輸入
2.轉(zhuǎn)換c<--(f-32)*5/93.輸出#include<stdio.h>intmain(){doublef,c;scanf("%lf",&f);c=(f-32)*5/9;printf("f=%f,c=%f\n",f,c);return0;}輸入轉(zhuǎn)換輸出3.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.2數(shù)據(jù)類型程序=數(shù)據(jù)+代碼所有數(shù)據(jù)都具有確定的數(shù)據(jù)類型(datatype)
C語言是靜態(tài)類型語言
數(shù)據(jù)類型基本類型整數(shù)類型char◆int◆shortlongunsignedcharunsignedshortunsignedintunsignedlonglonglong實(shí)數(shù)類型floatdouble◆longdouble算術(shù)類型枚舉類型指針類型無值類型void構(gòu)造類型數(shù)組類型結(jié)構(gòu)類型聯(lián)合類型3.2數(shù)據(jù)類型數(shù)據(jù)類型決定:存儲(chǔ)空間的大小、數(shù)據(jù)值的表示范圍允許的操作種類常量、變量、表達(dá)式、函數(shù)等都有確定的數(shù)據(jù)類型。一旦確定,就不會(huì)改變。3.2數(shù)據(jù)類型數(shù)據(jù)存放在存儲(chǔ)器中,存儲(chǔ)器以字節(jié)為最小存儲(chǔ)單元,一個(gè)字節(jié)(byte)由8個(gè)二進(jìn)制位(bit)組成。數(shù)據(jù)按其所需的存儲(chǔ)單元和組織形式不同,分成不同數(shù)據(jù)類型。3.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.3標(biāo)識(shí)符、常量與變量、宏C語言的字符集
abcdefghIjklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789
!”#%&’()*+,-./:;<=>?[\]^_{|}~
共91個(gè)字符,另外,字符串中還允許出現(xiàn)中文字符。3.3標(biāo)識(shí)符、常量與變量、宏C的構(gòu)詞方式——標(biāo)識(shí)符標(biāo)識(shí)符是用戶編程時(shí)使用的名字。在計(jì)算機(jī)語言中,對(duì)于變量、常量、函數(shù)、語句塊都有自己的名字,我們稱這些名字為標(biāo)識(shí)符。標(biāo)識(shí)符命名是有一定規(guī)則的。長(zhǎng)度1-32位,該長(zhǎng)度是由機(jī)器的編譯系統(tǒng)決定的,例如32位機(jī)器identify4.標(biāo)識(shí)符命名時(shí)應(yīng)做到“見名知意”。3.標(biāo)識(shí)符中大小寫字母表示的意義不同。2.不能把C關(guān)鍵詞作為用戶標(biāo)識(shí)符。1.標(biāo)識(shí)符是由字母、數(shù)字、下劃線“_”組成的。首字母只能是字母或者下劃線,不能是數(shù)字。3.3標(biāo)識(shí)符、常量與變量、宏下面標(biāo)識(shí)符正確嗎?#123,.COM,$100,1996Y,1_2_3,Win3.2必須以字母或者下劃線開頭C語言規(guī)定不能以“#”開頭必須以字母或者下劃線開頭不能出現(xiàn)小數(shù)點(diǎn)“.”C語言規(guī)定不能以“$”開頭必須以字母或者下劃線開頭_ABC與_abc是兩個(gè)不同的標(biāo)識(shí)符。重要提示:使用標(biāo)識(shí)符時(shí),不要忘了大小寫字母之間的區(qū)別!3.3標(biāo)識(shí)符、常量與變量、宏標(biāo)示符命名通過變量名就知道變量的含義。這樣可提高程序的可讀性。通常應(yīng)選擇能表示數(shù)據(jù)含義的英文單詞(或縮寫)作變量名。
例如:name(姓名)、gender(性別)、
age(年齡)、salary(工資)。3.3標(biāo)識(shí)符、常量與變量、宏標(biāo)示符可以分為以下三類標(biāo)識(shí)符ANSI定義了C語言的32個(gè)關(guān)鍵詞,這些都是不能另作它用,只能當(dāng)作關(guān)鍵字使用。預(yù)定義
標(biāo)識(shí)符用戶
標(biāo)識(shí)符由用戶根據(jù)需要定義的標(biāo)識(shí)符稱為用戶標(biāo)識(shí)符。一般來給變量、函數(shù)、數(shù)組或文件等命名,用戶標(biāo)識(shí)符不能使用已規(guī)定的關(guān)鍵字和預(yù)定義的標(biāo)識(shí)符。關(guān)鍵詞有些標(biāo)識(shí)符在C語言中都有特定的含義,如函數(shù)名和預(yù)處理命令名、C語言提供的庫(kù)函數(shù)的名字printf和define等,C語言的語法允許這類標(biāo)識(shí)符另作它用,不過這些標(biāo)識(shí)符會(huì)失去系統(tǒng)規(guī)定的原意。3.3標(biāo)識(shí)符、常量與變量、宏關(guān)鍵字C語言定義了一些具有特定意義的單詞作關(guān)鍵字(又叫保留字)。對(duì)于關(guān)鍵字,用戶只能嚴(yán)格按規(guī)定使用而不能作為它用。所有關(guān)鍵字都用小寫,且必須嚴(yán)格按定義拼寫。C語言的關(guān)鍵字較少,只有32個(gè)。autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile3.3標(biāo)識(shí)符、常量與變量、宏#include<stdio.h>intmain(){
doublecelsius,fahr;
fahr=100.0;
celsius=5*(fahr-32)/9;
printf("fahr=%f,celsius=%f\n",fahr,celsius);
return0;}定義fahr和celsius為double型給fahr賦值計(jì)算celsius的值輸出fahr和celsius的值
3.3標(biāo)識(shí)符、常量與變量、宏數(shù)據(jù)是計(jì)算機(jī)程序處理加工的對(duì)象。doublecelsius,fahr;fahr=100.0;celsius=5*(fahr-32)/9;在計(jì)算機(jī)高級(jí)語言中,數(shù)據(jù)有兩種表現(xiàn)形式:常量:在程序運(yùn)行過程中,其值不能被改變。
例如,100.0,5,32,9變量:在程序運(yùn)行過程中,其值可以被改變。
如:doublecelsius,fahr;fahr=123.5;3.3標(biāo)識(shí)符、常量與變量、宏常量:指在程序運(yùn)行過程中不能改變其值的量常數(shù):例如,32,3.14,“ABCD”,’A’
在C語言中,不同類型的常量有不同的表示方法。符號(hào)常量:在程序中為了能明確表示常量的含義,提高程序的可閱讀性,常用一個(gè)符號(hào)名稱代表一個(gè)常量。
#include<stdio.h>#definePRICE30//注意該行末尾沒有分號(hào)
//
#define是預(yù)編譯命令,稱為宏(macro)定義。作用是符號(hào)替換。
intmain(){printf(“total=%d”,PRICE*10);
return0;}
在對(duì)程序進(jìn)行編譯之前,系統(tǒng)會(huì)進(jìn)行預(yù)處理,將所有PRICE符號(hào)常量全部替換為30。預(yù)編譯后程序變成:intmain(
){printf(“total=%d”,30*10);return0;}
3.3標(biāo)識(shí)符、常量與變量、宏#include<stdio.h>intmain(){floatl,s,r,v;r=3.5;l=2.0**r;s=*r*r;v=4.0/3**r*r*r;printf("l=%10.4f\n",l);printf("s=%10.4f\n",s);printf("v=%10.4f\n",v);return0;}#definePI3.1415926PI3.14159263.14159263.1415926注意事項(xiàng):符號(hào)常量一定要先定義再使用符號(hào)常量的值是不能改變的符號(hào)常量在程序中可以直接引用而不必作任何說明,因?yàn)榫幾g程序能夠根據(jù)常量的書寫形式辨別其數(shù)據(jù)類型。PIPI3.3標(biāo)識(shí)符、常量與變量、宏定義常量的另一種方法:
constintprice=30;
兩種方法的區(qū)別:
PRICE不分配存儲(chǔ)單元,price與變量一樣分配存儲(chǔ)單元,但price的值不允許修改。3.3標(biāo)識(shí)符、常量與變量、宏變量:變量代表一個(gè)命名的存儲(chǔ)單元,具有存儲(chǔ)數(shù)據(jù)的能力。變量名:用標(biāo)識(shí)符表示變量值:是數(shù)值,存儲(chǔ)單元中的內(nèi)容,在機(jī)器內(nèi)部用二進(jìn)制表示存儲(chǔ)單元:由變量的數(shù)據(jù)類型和在內(nèi)存中的位置確定在程序運(yùn)行過程中,變量的值是可以改變的。300變量值變量名存儲(chǔ)單元weightweight變量3.3標(biāo)識(shí)符、常量與變量、宏變量變量定義的一般形式:數(shù)據(jù)類型名變量名列表;例如:int
s;//定義整型變量floatx;//定義單精度浮點(diǎn)型變量doublearea,length;//定義雙精度浮點(diǎn)型變量定義變量時(shí)要指定變量名和數(shù)據(jù)類型用變量名代表內(nèi)存中的一個(gè)存儲(chǔ)單元存儲(chǔ)單元的大小(字節(jié)數(shù))由變量的數(shù)據(jù)類型決定3.3標(biāo)識(shí)符、常量與變量、宏變量變量必須先定義,后使用。#include<stdio.h>intmain(
){doublecelsius,fahr;
fahr=100.0;
celsius=5*(fahr-32)/9;printf("fahr=%f,celsius=%f\n",fahr,celsius);
return0;}3.3標(biāo)識(shí)符、常量與變量、宏變量C語言中的變量代表存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元數(shù)學(xué)中的變量代表未知數(shù)數(shù)學(xué)中:x=x+1(錯(cuò)誤的)C語言中:x=x+1(將變量x所代表的存儲(chǔ)單元中的值讀取出來,增加1,再存放到存儲(chǔ)單元中。)10
11x=x+1xx3.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.4整數(shù)類型有三種表示形式:(1)十進(jìn)制:與數(shù)學(xué)中十進(jìn)制寫法相同,如6、-31、101等都是合法的。(變換10
->2
,整數(shù):除2取余,小數(shù):乘2取整)(2)八進(jìn)制:用0開始的由0∽7構(gòu)成的數(shù),如0777、012等都是合法的。(3)十六進(jìn)制:用0x或0X開始的由0,1,2,…,9,a,…,f(或大寫)構(gòu)成的數(shù),如0x123、0xffFF等都是合法的整型常量。3.4整數(shù)類型整型常數(shù)的表示方法
還有一種被稱為長(zhǎng)整型常數(shù)的整型常數(shù),其表示形式是在整型常數(shù)的三種表示形式后加上字母l或L。此外,還有LL,LU等多種形式。
如:6l或6L012l或012L
0x12l或0x12L012LU123LL0157LLU等整型變量的二進(jìn)制表示3.4整數(shù)類型iden001000……001101位符號(hào)位
31位數(shù)據(jù)位以32位為例
32位數(shù)據(jù)位iden00100……001101無符號(hào)類型數(shù)據(jù)在內(nèi)存中是以二進(jìn)制補(bǔ)碼(complement)形式表示的。例如(32位機(jī)器):
inti;i=10;
intj;j=-100000000000000000i0000000010100000
1111111111111111j符號(hào)位1111111101101111
符號(hào)位3.4整數(shù)類型原碼:符號(hào)位+絕對(duì)值轉(zhuǎn)換后的二進(jìn)制反碼:符號(hào)位+絕對(duì)值轉(zhuǎn)換后的二進(jìn)制每位的反補(bǔ)碼:符號(hào)位+(反碼+1)一般帶符號(hào)的整數(shù)采用補(bǔ)碼表示方法。3.4整數(shù)類型
類型含義占存儲(chǔ)空間
數(shù)值的范圍char字符1個(gè)字節(jié)-128∽127int整型4個(gè)字節(jié)-2147483648∽2147483647long長(zhǎng)整型4個(gè)字節(jié)-2147483648∽2147483647longlong
長(zhǎng)長(zhǎng)整型8個(gè)字節(jié)263∽263-1short短整型2個(gè)字節(jié)-32768∽32767僅以32位編譯器為例!3.4整數(shù)類型C標(biāo)準(zhǔn)中沒有具體規(guī)定各種數(shù)據(jù)類型所占用存儲(chǔ)單元的字節(jié)數(shù),
這由編譯系統(tǒng)自己決定。C標(biāo)準(zhǔn)只規(guī)定了long類型的表示范圍不小于int,但也允許它們表示范圍相同。short類型的表示范圍不大于int型在不同編譯器中,數(shù)據(jù)類型所占的字節(jié)數(shù)可能是不同的。如:GCC中是4個(gè)字節(jié),而早期的TC中的int是2個(gè)字節(jié)sizeof(類型名)或sizeof(表達(dá)式)返回該類型在使用編譯器中的所占字節(jié)數(shù),如:GCC中printf("%d,%d,%d,%d",sizeof(int),sizeof(long),sizeof(shortint),sizeof(longlong));3.4整數(shù)類型如果所表示的數(shù)據(jù)都為正數(shù),則可以將變量定義“無符號(hào)”整型無符號(hào)基本整型unsignedint無符號(hào)短整型unsignedshort[int]無符號(hào)長(zhǎng)整型unsignedlong[int]無符號(hào)雙長(zhǎng)整型unsignedlonglong[int]無符號(hào)整型數(shù)據(jù)存儲(chǔ)單元的最高位不表示符號(hào)位有符號(hào)基本整型[signed]int有符號(hào)短整型[signed]short[int]有符號(hào)長(zhǎng)整型[signed]long[int]有符號(hào)雙長(zhǎng)整型[signed]longlong[int]有符號(hào)整型數(shù)據(jù)存儲(chǔ)單元的最高位代表符號(hào)位(0為正,1為負(fù))3.4整數(shù)類型0000000000001111a0111111111111111b1111111111111111符號(hào)位1111111111111111ua=32767;b=-1;u=65535;在32位機(jī)中,變量a、b、u的實(shí)際存儲(chǔ)shortinta=32767,b=-1;unsignedshortintu=65535;
3.4整數(shù)類型整型變量的定義:C規(guī)定在程序中所有用到的變量都必須在程序中定義,即“強(qiáng)制類型定義”。例如:
inta,b(指定變量a、b為整型)
unsignedshortc,d;(指定變量c、d為無符號(hào)短整型)
longe,f;(指定變量e、f為長(zhǎng)整型)變量在使用之前必須先定義!a3.4整數(shù)類型a3.4整數(shù)類型整型變量的定義與使用
#include<stdio.h>
voidmain()
{inta,b,c,d;/*指定a、b、c、d為整型變量*/
unsignedu;/*指定u為無符號(hào)整型變量*/
a=12;b=-24;u=10;
c=a+u;d=b+u;
printf(″a+u=%d,b+u=%d\n″,c,d);
}說明:
可以看到不同種類的整型數(shù)據(jù)可以進(jìn)行算術(shù)運(yùn)算運(yùn)行結(jié)果:
a+u=22,b+u=-14
整型變量的溢出(overflow)
一個(gè)int型的變量最大允許值為INT_MAX(定義在limits.h中),最小為INT_MIN,如果超出范圍就會(huì)出現(xiàn)所謂溢出的運(yùn)行時(shí)錯(cuò)誤(run-timeerror)。
如在一個(gè)32位系統(tǒng)中,一個(gè)int類型的數(shù)據(jù)最大值為2147483647,如果再加上1,就會(huì)溢出,值變?yōu)?2147483648。3.4整數(shù)類型整型變量的溢出#include<stdio.h>intmain(){inta,b;a=2147483647;b=a+1;printf(“a=%d,b=%d\n”,a,b);
return0;}32位系統(tǒng)中的運(yùn)行結(jié)果為:
a=2147483647,b=-21474836483.4整數(shù)類型整型變量的溢出
上例:如在32位系統(tǒng)中
a:7fffffffb:800000002147483647-2147483648運(yùn)行時(shí),系統(tǒng)不會(huì)給出溢出提示!防止溢出的發(fā)生是程序員的責(zé)任!3.4整數(shù)類型整型常量的類型(1)一個(gè)整數(shù),如果其值在-32768~+32767范圍內(nèi),認(rèn)為它是int型,它可以賦值給int型和longint型變量。(2)一個(gè)整數(shù),如果其值超過了上述范圍,而在-2147483637~+2147483647范圍內(nèi),則認(rèn)為它是為長(zhǎng)整型。可以將它賦值給一個(gè)longint型變量。3.4整數(shù)類型整型常量的類型(3)如果所用的C版本(如TurboC)分配給shortint與int型數(shù)據(jù)在內(nèi)存中占據(jù)的長(zhǎng)度相同,則它的表數(shù)范圍與int型相同。因此一個(gè)int型的常量同時(shí)也是一個(gè)shortint型常量,可以賦給int型或shortint型變量。3.4整數(shù)類型整型常量的類型(4)一個(gè)整常量后面加一個(gè)字母u或U,認(rèn)為是unsignedint型,如12345u,在內(nèi)存中按unsignedint規(guī)定的方式存放(存儲(chǔ)單元中最高位不作為符號(hào)位,而用來存儲(chǔ)數(shù)據(jù))。如果寫成-12345u,則先將-12345轉(zhuǎn)換成其補(bǔ)碼53191,然后按無符號(hào)數(shù)存儲(chǔ)。3.4整數(shù)類型整型常量的類型(5)在一個(gè)整常量后面加一個(gè)字母l或L,則認(rèn)為是longint型常量。例如123l.432L0L等。這往往用于函數(shù)調(diào)用中。如果函數(shù)的形參為longint型,則要求實(shí)參也為longint型。3.4整數(shù)類型重要提示
編程時(shí)必須保證所有整型變量在任何時(shí)候都沒有超出數(shù)據(jù)類型的取值范圍!3.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.5浮點(diǎn)型類型浮點(diǎn)型常數(shù),有兩種表示形式:(1)十進(jìn)制小數(shù)形式例如:0.618、108.02、-1.414、108.0、0.0等,這與數(shù)學(xué)中表示實(shí)數(shù)的方法相同;(2)指數(shù)形式
例如:108E2(或108e2)表示實(shí)數(shù)108×102
;
-16.578E5(-16.578e5)表示實(shí)數(shù)-16.578×1050.1234E-6,表示實(shí)數(shù)0.1234×10-6注意:字母e(或E)之前必須有數(shù)字,且e后面的指數(shù)必須為整數(shù)1e3、1.8e-3、-123e-6、-.1e-3e3、2.1e3.5、.e3、e
3.5浮點(diǎn)型類型規(guī)范化的指數(shù)形式:在字母e(或E)之前的小數(shù)部分中,小數(shù)點(diǎn)前數(shù)字為0、小數(shù)點(diǎn)后第1位數(shù)字不為0的表示形式稱為規(guī)范化指數(shù)形式。例如:123.456可以表示為:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e其中的0.123456e3稱為“規(guī)范化的指數(shù)形式”。浮點(diǎn)型單精度(float型)雙精度(double型)長(zhǎng)雙精度(longdouble型)例如:定義浮點(diǎn)型變量
floatf1,f2;
doubled1,d2;
longdoubleld;3.5浮點(diǎn)型類型
3.5浮點(diǎn)型類型類型
占存儲(chǔ)空間
有效數(shù)位數(shù)
數(shù)值范圍
float4個(gè)字節(jié)6∽7-3.4×10-38∽3.4×1038
double8個(gè)字節(jié)15∽16-1.7×10-308∽1.7×10308
Longdouble16個(gè)字節(jié)18∽19-1.2×10-4932∽1.2×104932
僅以某種機(jī)器為例!longdouble一般不支持!3.5浮點(diǎn)型類型float和double在計(jì)算機(jī)的存儲(chǔ)單元中是以指數(shù)形式存放的,即,把一個(gè)浮點(diǎn)數(shù)用符號(hào)位、指數(shù)和尾數(shù)來表示。指數(shù)部分和尾數(shù)部分各占多少位在C標(biāo)準(zhǔn)中并無具體規(guī)定,由編譯系統(tǒng)自己決定。符號(hào)位指數(shù)尾數(shù)長(zhǎng)度float1(bit)8(bit)23(bit)32(bit)double1(bit)11(bit)52(bit)64(bit)
3.5浮點(diǎn)型類型浮點(diǎn)型數(shù)據(jù)在內(nèi)存中的存放方式一個(gè)浮點(diǎn)float型數(shù)據(jù)一般在內(nèi)存中占4個(gè)字節(jié)。與整型數(shù)據(jù)的存儲(chǔ)方式不同,浮點(diǎn)型數(shù)據(jù)是按照指數(shù)形式存儲(chǔ)的。分成尾數(shù)和指數(shù)兩部分。
x127+c符號(hào)0/1尾數(shù)部分M=1.x指數(shù)2cIEEE754float表示M
2C:M稱為尾數(shù),C稱為階碼M和C均采用二進(jìn)制表示。float共32位,在內(nèi)存的存放形式:最高位:符號(hào)位,指數(shù)(8位):127+C尾數(shù)(23位):M除去最左邊的‘1’后的部分
例:12.5=(1100.1)2=(1.1001)2*23
表示為:
010000010100100000000000000000003.5浮點(diǎn)型類型
例:-0.25=-(0.01)2=-(1.0)2*2-2
表示為:
10111110100000000000000000000000
3.5浮點(diǎn)型類型IEEE754double表示M
2C
:M稱為尾數(shù),C稱為階碼,M和C均采用二進(jìn)制表示。double共64位,在內(nèi)存的存放形式:最高位:符號(hào)位指數(shù)(11位):1023+C尾數(shù)(52位):M除去最左邊的‘1’后的部分
3.5浮點(diǎn)型類型3.5浮點(diǎn)型類型例:double型浮點(diǎn)數(shù)38414.4的內(nèi)存存儲(chǔ)形式:
1、把整數(shù)部和小數(shù)部分開處理:(1)整數(shù)部分的十六進(jìn)制表示:960E(1001011000001110)。(2)小數(shù)的處理:
0.4=0.01100110011001100110…(乘二取整)
38414.4的二進(jìn)制表示:
1001011000001110.0110011001100110011001100110011001100110....
2、以指數(shù)形式表示:四舍五入取53位
1.0010110000011100110011001100110011001100110011001101*2^15
(小數(shù)點(diǎn)前面只有一位,并且必為1,該1為隱藏值,在內(nèi)存是不存儲(chǔ)的)3、尾數(shù)為小數(shù)點(diǎn)后的52位,指數(shù)為15,將指數(shù)用二進(jìn)制表示。
指數(shù)占11位,將指數(shù)先加上1023再轉(zhuǎn)化為二進(jìn)制表示。
15+1023=1038,其二進(jìn)制表示為:100000011104、符號(hào)位為0(正數(shù)),將三部分合在一起(尾數(shù)最高位的1不要):01000000
11100010
11000001
11001100
11001100
11001100
11001100
11001101按字節(jié)倒序存儲(chǔ)的十六進(jìn)制數(shù)就是:
CDCCCCCCCCC1E240
一個(gè)基本類型數(shù)據(jù)的幾個(gè)字節(jié)的在內(nèi)存中存放次序,不同CPU可能不同。如:IntelCPU:稱為little_endian(小端格式)3.5浮點(diǎn)型類型地址編號(hào)0x40000000CD0x40000001CC0x40000002CC0x40000003CC0x40000004CC0x40000005C10x40000006E20x4000000740低地址中存放的是數(shù)據(jù)的低字節(jié);高地址存放的是數(shù)據(jù)的高字節(jié)。
3.5浮點(diǎn)型類型浮點(diǎn)型數(shù)據(jù)的表示誤差
由于浮點(diǎn)型變量存放在有限的幾個(gè)字節(jié)的存儲(chǔ)單元中,所以能提供的有效數(shù)字總是有限的,因此有效位以外的數(shù)字將被舍去,由此會(huì)產(chǎn)生誤差。
即:浮點(diǎn)數(shù)的表示是不精確的!
3.5浮點(diǎn)型類型浮點(diǎn)型數(shù)據(jù)的舍入誤差
#include<stdio.h>
voidmain()
{floata,b;
a=123456.789e5;
b=a+20;
printf(“%f\n”,b);
}運(yùn)行結(jié)果:
123456.789e5說明:一個(gè)浮點(diǎn)型變量只能保證的有效數(shù)字是7位有效數(shù)字,后面的數(shù)字是無意義的,并不準(zhǔn)確地表示該數(shù)。應(yīng)當(dāng)避免將一個(gè)很大的數(shù)和一個(gè)很小的數(shù)直接相加或相減,否則就會(huì)“丟失”小的數(shù)
3.5浮點(diǎn)型類型浮點(diǎn)型數(shù)據(jù)的誤差。例:#include<stdio.h>intmain(){doublea;a=0.1;printf("a=%.17f\n",a);return0;}GCC運(yùn)行結(jié)果為:a=0.10000000000000001
由于一個(gè)double變量只能保證16位有效數(shù)字,所以后面的數(shù)字是無意義的。
類似的還有:1.0/3*3結(jié)果并不一定等于1。3.5浮點(diǎn)型類型
浮點(diǎn)型變量的溢出(overflow)和下溢(underflow)
一個(gè)double型的變量最大絕對(duì)值為DBL_MAX(定義在float.h中)(如:1.7976931348623157e+308),
最小絕對(duì)值為DBL_MIN(如:2.2250738585072014e-308),如果超出范圍就會(huì)出現(xiàn)上溢或下溢的錯(cuò)誤情況。上溢
doubletoobig=DBL_MAX*100.0;printf("%e\n",toobig);
32位系統(tǒng)中的運(yùn)行結(jié)果可能為:1.#INF00e+000
3.5浮點(diǎn)型類型下溢(過于接近于0)
doubletoosmall=DBL_MIN/1E30;printf("%e\n",toosmall);
32位系統(tǒng)中的運(yùn)行結(jié)果可能為:
0.000000e+0003.5浮點(diǎn)型類型3.5浮點(diǎn)型類型浮點(diǎn)型常量的類型
C編譯系統(tǒng)將浮點(diǎn)型常量作為雙精度來處理。
例如:f=2.45678*4523.65
系統(tǒng)先把2.45678和4523.65作為雙精度數(shù),然后進(jìn)行相乘的運(yùn)算,得到的乘也是一個(gè)雙精度數(shù)。最后取其前7位賦給浮點(diǎn)型變量f。如是在數(shù)的后面加字母f或F(如1.65f,654.87F),這樣編譯系統(tǒng)就會(huì)把它們按單精度(32位)處理。3.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算字符常數(shù)普通字符:用單引號(hào)括起的一個(gè)字符,如‘a(chǎn)’、‘?’、‘B’、‘5’和‘*’等都是合法的字符常量?!產(chǎn)’和‘A’是不同的字符常量。字符型數(shù)據(jù)存儲(chǔ)在內(nèi)存中占一個(gè)字節(jié),是以其代碼(ASCII碼)存儲(chǔ)的。字符常量
存儲(chǔ)形式
十進(jìn)制表示‘A’0100000165‘a(chǎn)’0110000197‘?’0011111163‘5’0011010153ASCII碼附錄B,給出了常用字符與其對(duì)應(yīng)的ASCII碼。
3.6字符類型ASCII--AmericanStandardCodeforInformationInterchange。ASCII字符集的大小為7位,MSB為0。ASCII字符集包含可打印字符和非打印字符(控制字符)兩類。3.6字符類型轉(zhuǎn)義字符:在ASCII碼表中有一些非打印的控制字符,例如回車、響鈴、退格等。為了能夠表示它們,C語言采用在反斜杠(\)字符后加其他字符的方法來解決。這稱為轉(zhuǎn)義序列字符。轉(zhuǎn)義字符中反斜杠(\)后面的字符在編譯時(shí)需要特殊處理,不能當(dāng)作普通字符對(duì)待。例如,‘\n’是在第一個(gè)字符反斜杠(\)后緊跟一個(gè)字符n,它表示一個(gè)換行字符?!甛n’代表一個(gè)字符(換行符),其ASCII為10。3.6字符類型轉(zhuǎn)義序列
含義ASCII碼
\n回車換行,將光標(biāo)移至下一行首10\r回車,將光標(biāo)移至本行開頭位置13\b退格,將光標(biāo)左移一格8\t水平制表,光標(biāo)移至本行下一tab位置9\v垂直制表符11\f換頁(yè),將光標(biāo)移至下一頁(yè)開頭位置12\a響鈴7\0空字符,其符號(hào)常量名為NULL0\’
單引號(hào)字符39\”雙引號(hào)字符34\\反斜杠字符92\0oo1到3位八進(jìn)制數(shù)所代表的字符\xhh1到2位十六進(jìn)制數(shù)所代表的字符3.6字符類型字符變量
字符變量用于存放字符,在內(nèi)存中占1字節(jié)。字符變量的定義形式如下:
charc1,c2;可以把字符常量賦值給字符變量,例如:
c1=‘a(chǎn)’;c2=‘b’;3.6字符類型
字符型變量數(shù)據(jù)在內(nèi)存中的存放方式
將一個(gè)字符常量存放到一個(gè)字符變量中,其實(shí)是存放了該字符的ASCII碼(也稱字符的內(nèi)碼)。例如:charc1,c2;c1=‘a(chǎn)’;c2=‘b’;c10110000101100010c23.6字符類型#include<stdio.h>intmain(){charc1,c2;c1=97;/*字母a*/c2=98;/*字母b*/printf("%c,%c\n",c1,c2);printf("%d,%d\n",c1,c2);return0;}運(yùn)行的結(jié)果是:
a,b
97,983.6字符類型
一個(gè)字符變量中的值,是被當(dāng)成整數(shù)值使用,還是當(dāng)成字符使用,完全看程序員的意愿。01100001c1a%c%d973.6字符類型例:大小寫字母的轉(zhuǎn)換
#include<stdio.h>intmain(){
charc1,c2;c1='a';c2='b';c1=c1-32;c2=c2-32;printf("%c,%c\n",c1,c2);return0;}運(yùn)行的結(jié)果是:
A,B注意從ASCII碼表可以看到每個(gè)小寫字母比它相應(yīng)的大寫字母的ASCII碼值大32。C語言允許字符數(shù)據(jù)和整型數(shù)據(jù)直接進(jìn)行算術(shù)運(yùn)算。3.6字符類型字符‘1’和整數(shù)1是不同的概念:字符‘1’只是代表一個(gè)形狀為‘1’的符號(hào),在內(nèi)存中以ASCII碼(49)二進(jìn)制形式存儲(chǔ),占1個(gè)字節(jié)整數(shù)1是以整數(shù)存儲(chǔ)方式(二進(jìn)制補(bǔ)碼方式)存儲(chǔ)的,以shortint型存放則占2個(gè)字節(jié)0011000100000000000000013.6字符類型3.6字符類型C規(guī)定:在每一個(gè)字符串常量的結(jié)尾加一個(gè)“字符串結(jié)束標(biāo)志”,以便系統(tǒng)據(jù)此判斷字符串是否結(jié)束。C規(guī)定以字符‘\0’作為字符串結(jié)束標(biāo)志。
如:如果有一個(gè)字符串常量”CHINA”,實(shí)際上在內(nèi)存中是:CHINA\0它占內(nèi)存單元不是5個(gè)字符,而是6個(gè)字符,最后一個(gè)字符為‘\0’。但在輸出時(shí)不輸出’\0’。3.6字符類型‘a’是字符常量,”a”是字符串常量,二者不同。
如:假設(shè)C被指定為字符變量
:charc結(jié)論:不能把一個(gè)字符串常量賦給一個(gè)字符變量。c=‘a(chǎn)’;c=”a”;c=”CHINA”;
注意:‘a(chǎn)’和“a”之間的區(qū)別:‘a(chǎn)’是一個(gè)字符常量,只有一個(gè)字符a;“a”為一個(gè)字符串常量,它是由一個(gè)字符a和一個(gè)結(jié)束符(‘\0’)組成,“a”的長(zhǎng)度為2個(gè)字符??沾啊笔莾H有一個(gè)結(jié)束符的字符串常量,其長(zhǎng)度為1個(gè)字符。不要混淆字符常量與字符串常量的不同表示方式!3.6字符類型
字符串常數(shù)用雙引號(hào)括起來的一個(gè)或多個(gè)字符序列,如"Howareyou"、"a"、"china"、""、"漢字"等都是合法的字符串常數(shù)。每個(gè)字符串常數(shù)都用一個(gè)0(‘\0’或NULL)作為結(jié)束符,所以每個(gè)字符串長(zhǎng)度為其字符個(gè)數(shù)加1。如"a"的長(zhǎng)度為2個(gè)字節(jié);而"Howareyou"的長(zhǎng)度為12個(gè)字節(jié);"漢字"的長(zhǎng)度為5個(gè)字節(jié)。3.6字符類型字符串常量字符串常量是一對(duì)雙撇號(hào)括起來的字符序列.合法的字符串常量:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”可以輸出一個(gè)字符串,如
printf(“Howdoyoudo.”);3.6字符類型
字符串常數(shù)"Howareyou"
在內(nèi)存中的存放形式:010010000110111100100000011101110110000101110010001000000110010101111001011011110000000001110101‘\0’‘u’‘H’‘o’‘w’‘’‘a(chǎn)’‘r’‘e’‘’‘y’‘o’3.6字符類型3.6字符類型#include<stdio.h>intmain(){charc[]="Howareyou!";printf("%s\n字符串的字節(jié)數(shù)為:%d",c,sizeof(c));return0;}運(yùn)行結(jié)果:Howareyou!字符串的字節(jié)數(shù)為:133.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.7變量定義及初始化
在定義變量的同時(shí)為變量賦初值,這稱為變量初始化(initialization)。
例如:
inta=3,a1;
floatf=3.54F;doubled1,d2=3.54;charc=‘a(chǎn)’;未初始化的變量值是不確定的。3.1一個(gè)簡(jiǎn)單程序的例子3.2數(shù)據(jù)類型3.3標(biāo)識(shí)符、常量與變量、宏定義3.4整數(shù)類型3.5浮點(diǎn)數(shù)類型3.6字符類型3.7變量定義及初始化3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算字符型、整型、浮點(diǎn)型數(shù)據(jù)之間可以進(jìn)行混合運(yùn)算。
例如:10+‘a(chǎn)’+1.5-8765.123*‘0’3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算
算術(shù)運(yùn)算中常規(guī)自動(dòng)類型轉(zhuǎn)換規(guī)則
在算術(shù)運(yùn)算過程中允許參加運(yùn)算的對(duì)象進(jìn)行自動(dòng)數(shù)據(jù)類型轉(zhuǎn)換。double
longunsignedlongint
unsignedunsignedshortchar,unsignedchar,short其中:必要時(shí)進(jìn)行的轉(zhuǎn)換總是進(jìn)行的轉(zhuǎn)換(稱為類型提升)float例如:
10+‘a(chǎn)’+1.5–1.23*‘0’char型轉(zhuǎn)換為int型
97表達(dá)式值為107int型表達(dá)式值為108.5double型char型轉(zhuǎn)換為int型48表達(dá)式值為59.04double型表達(dá)式值為49.46double型
最后,表達(dá)式值為49.46,double型3.8各類數(shù)值型數(shù)據(jù)間的混合運(yùn)算3.9算術(shù)運(yùn)算符及其表達(dá)式3.10賦值運(yùn)算符及其表達(dá)式3.11順序運(yùn)算符及其表達(dá)式3.12位運(yùn)算符及其表達(dá)式3.13語句概述3.14輸入、輸出3.15程序的錯(cuò)誤類型3.16調(diào)試與測(cè)試3.9算術(shù)運(yùn)算符及其表達(dá)式
運(yùn)算符附錄C(P378)
算術(shù)運(yùn)算符+-*/%
關(guān)系運(yùn)算符>>=<<===!=
邏輯運(yùn)算符!&&||
位運(yùn)算符&|~^>><<
賦值運(yùn)算符=等
……3.9算術(shù)運(yùn)算符及其表達(dá)式
表達(dá)式(expression)單個(gè)操作數(shù)或是用運(yùn)算符將操作數(shù)連接起來的式子,也可使用括號(hào)。
子表達(dá)式用運(yùn)算符將操作數(shù)連接起來的式子,它又用作另一更大表達(dá)式的操作數(shù)。
表達(dá)式例子a+bsb-c+d(a=5)+(b=8)a<100
a==0a!=10&&b>=1a=b=c=100a=(b=6)+(c=4)
a>>2a^b3.9算術(shù)運(yùn)算符及其表達(dá)式3.9算術(shù)運(yùn)算符及其表達(dá)式算術(shù)運(yùn)算符
(1)+加法運(yùn)算符,如a+b(2)-
減法運(yùn)算符,如a-b(3)*乘法運(yùn)算符,如a*b(4)/除法運(yùn)算符,如a/b除或整除 b不得為0(5)%整余運(yùn)算符,如a%ba,b必須為整型
+-用作單目運(yùn)算時(shí)表示+a-a
算術(shù)運(yùn)算符舉例
(1)1+21.2+3(2)1-
2
1.2-3(3)1*21.2*3(4)5/25.0/2(5)5%2-5%33.9算術(shù)運(yùn)算符及其表達(dá)式
%也稱求余運(yùn)算、模運(yùn)算
15%4的值是33%5的值是3
求余運(yùn)算符兩邊的操作數(shù)必須是整型數(shù)據(jù),且結(jié)果值也是整型數(shù)據(jù)。如:8.6%4是非法的3.9算術(shù)運(yùn)算符及其表達(dá)式
問題:
浮點(diǎn)數(shù)如何進(jìn)行求余運(yùn)算?
8.6%4
0.6函數(shù)fmod(
):浮點(diǎn)數(shù)求余數(shù)(在math.h中)3.9算術(shù)運(yùn)算符及其表達(dá)式優(yōu)先級(jí)與結(jié)合律
使用算術(shù)運(yùn)算符的表達(dá)式是算術(shù)表達(dá)式。如:a*b/c–1.5+'a'
每個(gè)運(yùn)算符都具有優(yōu)先級(jí)與結(jié)合律,見附錄C(P378)。表達(dá)式運(yùn)算按優(yōu)先級(jí)先高后低順序進(jìn)行。表達(dá)式中幾個(gè)運(yùn)算符優(yōu)先級(jí)相同時(shí)按結(jié)合律順序進(jìn)行。3.9算術(shù)運(yùn)算符及其表達(dá)式優(yōu)先級(jí)與結(jié)合律
例子:a*b/c–1.5+'a'
先*/,后+-*/優(yōu)先級(jí)相同,結(jié)合律為左結(jié)合,因此先*后/。同樣先-后+。3.9算術(shù)運(yùn)算符及其表達(dá)式優(yōu)先級(jí)與結(jié)合律
使用括號(hào)可改變結(jié)合律。例子:(a+b)/c3.9算術(shù)運(yùn)算符及其表達(dá)式重要提示
括號(hào)的使用要配對(duì)!強(qiáng)制類型轉(zhuǎn)換運(yùn)算符
(類型名)表達(dá)式使整個(gè)表達(dá)式的類型變?yōu)橛衫ㄌ?hào)中的類型名指出的類型。例如:doublea,b;定義a、b為浮點(diǎn)型變量,但在執(zhí)行了表達(dá)式(int)(a+b)后,表達(dá)式a+b的類型為int型。3.9算術(shù)運(yùn)算符及其表達(dá)式思考題請(qǐng)思考一下,表達(dá)式(int)(100.98/3.14)與(int)100.98/3.14有什么區(qū)別?強(qiáng)制類型轉(zhuǎn)換運(yùn)算符的優(yōu)先級(jí)別高于除(/)運(yùn)算符例
強(qiáng)制類型轉(zhuǎn)換#include<stdio.h>intmain(){doublex;inti;x=3.6;
i=(int)x%2;printf("x=%f,i=%d\n",x,i);return0;}運(yùn)行的結(jié)果是:x=3.600000,i=13.9算術(shù)運(yùn)算符及其表達(dá)式
自增、自減運(yùn)算符
單目運(yùn)算符,用來對(duì)字符型、整型、指針型、數(shù)組元素等變量進(jìn)行算術(shù)運(yùn)算,具有前綴和后綴兩種形式。其一般形式是: ++操作數(shù)操作數(shù)++--操作數(shù)操作數(shù)--
使操作數(shù)的值加1或減1。
例如:inti;i=10;i++;10ii++11i3.9算術(shù)運(yùn)算符及其表達(dá)式3.9算術(shù)運(yùn)算符及其表達(dá)式自增、自減運(yùn)算符前綴和后綴的區(qū)別++操作數(shù):表達(dá)式的值為操作數(shù)加1之后的值操作數(shù)++:表達(dá)式的值為操作數(shù)加1之前的值--操作數(shù):表達(dá)式的值為操作數(shù)減1之后的值操作數(shù)--:表達(dá)式的值為操作數(shù)減1之前的值
34inta=2;(++a)+13a23inta=2;(a--)+11a
3.9表達(dá)式的求值順序
設(shè)a=5、b=10、c=3、d=9、e=15,則表達(dá)式a+b*c-e%(a+d)的運(yùn)算順序如下所示:運(yùn)算符的結(jié)合方向分兩類:除=運(yùn)算符外,所有雙目運(yùn)算符都是從左向右方向結(jié)合;單目、三目和賦值運(yùn)算符是從右向左方向結(jié)合的。a+b*c-e%(a+d)301435134例如:inti=3;
-i++則等價(jià)于:-(i++),表達(dá)式的結(jié)果為-3,而i為43.9算術(shù)運(yùn)算符及其表達(dá)式3.10賦值運(yùn)算符及其表達(dá)式3.11順序運(yùn)算符及其表達(dá)式3.12位運(yùn)算符及其表達(dá)式3.13語句概述3.14輸入、輸出3.15程序的錯(cuò)誤類型3.16調(diào)試與測(cè)試3.10賦值運(yùn)算符及其表達(dá)式賦值運(yùn)算符用來將等號(hào)右邊表達(dá)式的值存放到等號(hào)左邊的變量中。賦值運(yùn)算符是一個(gè)雙目運(yùn)算符。其一般形式是:
變量=表達(dá)式整個(gè)表達(dá)式的值為變量賦值之后的值。例如:inta,b;b=8;a=(a=7)+b;inta,b;a=b=0;inta=7,b=8,c;c=a+b;類型轉(zhuǎn)換變量=表達(dá)式中變量和表達(dá)式的類型不一致時(shí),發(fā)生類型轉(zhuǎn)換。例如:inta;a=3.14;floatb;b=100;doubled;floatc;c=d;inte='a';inti=289;charc='a';c=i;inta;longb=8;a=b;unsigneda=2147483647;intb;b=a;3.10賦值運(yùn)算符及其表達(dá)式類型轉(zhuǎn)換1.將浮點(diǎn)型數(shù)據(jù)(包括單、雙精度)賦給整型變量時(shí),先對(duì)浮點(diǎn)數(shù)取整,舍棄小樹點(diǎn)后部分,賦予整形變量。2.將整型賦值給單雙精度時(shí),數(shù)值不變,但以浮點(diǎn)數(shù)形式存到變量中。
例如23,轉(zhuǎn)換成23.0。3.將一個(gè)double類型數(shù)據(jù)賦給float時(shí),先將雙精度轉(zhuǎn)換成單精度,只取6-7位有效數(shù)字,存儲(chǔ)到float變量的4個(gè)字節(jié)中。但注意雙精度浮點(diǎn)數(shù)值的大小不能超出float變量的取值范圍。否則會(huì)出錯(cuò)。3.10賦值運(yùn)算符及其表達(dá)式類型轉(zhuǎn)換4.將字符型數(shù)據(jù)賦給整型變量時(shí),將字符的ASCII代碼付給整型變量。5.將一個(gè)占字節(jié)多的整型數(shù)據(jù)賦給一個(gè)占字節(jié)少的整型變量或者字符變量(例如把占4個(gè)字節(jié)的int型數(shù)據(jù)賦給2個(gè)字節(jié)的short變量或者占1個(gè)字節(jié)的char變量)時(shí),只將其低字節(jié)原封不動(dòng)地送到被賦值的變量(即發(fā)生截?cái)啵?.10賦值運(yùn)算符及其表達(dá)式自動(dòng)類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換實(shí)例Example:
intnumber; floattotal,average; … average=total/number; 15.000000/2.0000007.500000total15.00000number2average??7.5000002.000000自動(dòng)類型轉(zhuǎn)換賦值中的自動(dòng)類型轉(zhuǎn)換若賦值運(yùn)算左側(cè)變量的類型與右側(cè)表達(dá)式的類型不一致,則賦值時(shí)發(fā)生自動(dòng)類型轉(zhuǎn)換轉(zhuǎn)換規(guī)則:將右側(cè)表達(dá)式的值的類型轉(zhuǎn)換成左側(cè)變量的類型將取值范圍小的類型轉(zhuǎn)換為取值范圍大的類型是安全的,反之是不安全的,可能會(huì)產(chǎn)生字節(jié)丟失的錯(cuò)誤自動(dòng)類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換實(shí)例自動(dòng)類型轉(zhuǎn)換自動(dòng)類型轉(zhuǎn)換實(shí)例Example:
inttotal,number; floataverage; … average=total/number; 15/27total15number2average??7.000000115/68強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換強(qiáng)轉(zhuǎn)可以消除從大到小的轉(zhuǎn)換警告轉(zhuǎn)換方法(類型)表達(dá)式;inta;a=(int)7.300000;a=7強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換的例子Example:
inttotal,number; floataverage; … average=(float)total/number; 15.000000/27.500000total15number2average??7.500000強(qiáng)制類型轉(zhuǎn)換強(qiáng)制類型轉(zhuǎn)換的例子m/2=2(float)(m/2)=2.000000(float)m/2=2.500000m=53.10賦值運(yùn)算符及其表達(dá)式類型轉(zhuǎn)換的一般規(guī)律除前面所述規(guī)則外,按存儲(chǔ)單元中的存儲(chǔ)形式直接傳送。賦值運(yùn)算符的優(yōu)先級(jí)是倒數(shù)第二(僅高于逗號(hào)運(yùn)算符),并且賦值運(yùn)算符具有右結(jié)合性規(guī)則。
a=b=c=0等價(jià)于a=(b=(c=0))3.10賦值運(yùn)算符及其表達(dá)式例:帶符號(hào)數(shù)據(jù)賦值給無符號(hào)變量
#include<stdio.h>
intmain(){unsigneda;intb=-1;a=b;printf("a=%u\n",a);
return0;}運(yùn)行的結(jié)果是:
a=4294967295111111111111111111111111111111113.10賦值運(yùn)算符及其表達(dá)式復(fù)合賦值運(yùn)算符
變量△=表達(dá)式
等價(jià)于變量=變量△(表達(dá)式)其中△是+、-、*、/、%等運(yùn)算符中的任何一個(gè)。如:+=a+=b等價(jià)于a=a+b,a+=b+c等價(jià)于a=a+(b+c)-=a-=b等價(jià)于a=a-b,a-=b+c等價(jià)于a=a-(b+c)*=a*=b等價(jià)于a=a*b,a*=b+c等價(jià)于a=a*(b+c)/=a/=b等價(jià)于a=a/b,a/=b+c等價(jià)于a=a/(b+c)%=a%=b等價(jià)于a=a%b,a%=b+c等價(jià)于a=a%(b+c)3.10賦值運(yùn)算符及其表達(dá)式復(fù)合賦值運(yùn)算符
思考題已知變量a的值為3,請(qǐng)問分別執(zhí)行下面兩個(gè)語句a+=a-=a*a;a+=a-=a*=a;
3.10賦值運(yùn)算符及其表達(dá)式
左值
賦值運(yùn)算符的左邊必須是一個(gè)可修改的左值(lvalue,如變量等)。例如:inta,b;b=5+(a=6);inta,b,c;a=(b=10)/(c=2);inta=12;a+=a-=a*a;inta,b;printf("%d",a=b);3.9算術(shù)運(yùn)算符及其表達(dá)式3.10賦值運(yùn)算符及其表達(dá)式3.11順序運(yùn)算符及其表達(dá)式3.12位運(yùn)算符及其表達(dá)式3.13語句概述3.14輸入、輸出3.15程序的錯(cuò)誤類型3.16調(diào)試與測(cè)試3.11順序運(yùn)算符及其表達(dá)式順序(逗號(hào))運(yùn)算符
是一個(gè)雙目運(yùn)算符,其一般形式是:
表達(dá)式1,表達(dá)式2,……表達(dá)式n
由逗號(hào)運(yùn)算符構(gòu)成的表達(dá)式的值是表達(dá)式n的值。逗號(hào)運(yùn)算符的求值順序是確定的,從左到右。
例如:
inta=3,b=8,c;
a+b,c=a-b,a=a*b;的值是表達(dá)式a=a*b的值24。
c=a%b,b=a*b,b+a
;的值是表達(dá)式b+a的值24+3。順序運(yùn)算符使用的例子:for(i=1,j=0;i<100;i++,j++)…3.11順序運(yùn)算符及其表達(dá)式順序運(yùn)算符
除了用作順序運(yùn)算符之外,也用于函數(shù)參數(shù)的分隔。如:printf("%d,%d",a,b);
printf("%d,%d,%d",max(a,b,c),b,c);逗號(hào)運(yùn)算符在所有運(yùn)算符中優(yōu)先級(jí)最低3.9算術(shù)運(yùn)算符及其表達(dá)式3.10賦值運(yùn)算符及其表達(dá)式3.11順序運(yùn)算符及其表達(dá)式3.12位運(yùn)算符及其表達(dá)式3.13語句概述3.14輸入、輸出3.15程序的錯(cuò)誤類型3.16調(diào)試與測(cè)試3.12位運(yùn)算符及其表達(dá)式位運(yùn)算--進(jìn)行二進(jìn)制位的運(yùn)算。參加位運(yùn)算的操作數(shù)必須是整型或字符型。位與運(yùn)算符&位或運(yùn)算符|位異或運(yùn)算符^位取反運(yùn)算符~位左移運(yùn)算符<<位右移運(yùn)算符>>3.12位運(yùn)算符及其表達(dá)式
3.12位與運(yùn)算符&
參加運(yùn)算的兩個(gè)操作數(shù)按對(duì)應(yīng)的位進(jìn)行“與”運(yùn)算。例如:3&5=1其具體操作如下
3的二進(jìn)制表示為00000000000000115的二進(jìn)制表示為&0000000000000101 0000000000000001
-3&-5=-7
-3的補(bǔ)碼形式是
1111111111111101
-5的補(bǔ)碼形式是&
1111111111111011
11111111111110013.12位或運(yùn)算符|參加運(yùn)算的兩個(gè)操作數(shù)按對(duì)應(yīng)的位進(jìn)行“或”運(yùn)算。例如:48|15=630000000000110000
|000000000000111100000000001111113.12位異或運(yùn)算符^
參加運(yùn)算的兩個(gè)操作數(shù)按對(duì)應(yīng)的位進(jìn)行“異或”運(yùn)算。若對(duì)應(yīng)位相同,則結(jié)果為0;若對(duì)應(yīng)位不同,則結(jié)果為1。例如:57^42=190000000000111001
^000000000010101000000000000100113.12位取反運(yùn)算符~“取反”運(yùn)算符是一個(gè)單目運(yùn)算符,用來將其操作數(shù)的每一位取反。例如:~0x0B8F
~00001100100011111111001101110000~0=-1,即:
~000000000000000011111111111111113.12位左移運(yùn)算符<<
將左操作數(shù)的各二進(jìn)制位全部向左移動(dòng)若干位。左邊移出的位丟棄,右邊空白位填0。左移1位相當(dāng)于乘2。例如:inta=15;則執(zhí)行a=a<<2;運(yùn)算后等于60。
<<2000000000000111100000000001111003.12位右移運(yùn)算符>>
將左操作數(shù)的各二進(jìn)制位全部向右移動(dòng)若干位。右邊移出的位丟棄,一般情況,左邊空白位填原最高位(即符號(hào)位)。右移1位相當(dāng)于除2。例如:inta=48;則執(zhí)行a=a>>2;運(yùn)算后等于12
>>2000000000011000000000000000011003.12位右移運(yùn)算符>>
算術(shù)右移:右移時(shí)左邊空白位填原符號(hào)位。邏輯右移:右移時(shí)左邊空白位填‘0’。一般unsigned類型用邏輯右移,signed用算術(shù)右移例如:inta=-1;則執(zhí)行a=a>>2;
>>21111111111111111算術(shù)右移
1111111111111111
>>21111111111111111邏輯右移
00111111111111113.12位運(yùn)算復(fù)合賦值運(yùn)算符
位運(yùn)算有如下復(fù)合賦值運(yùn)算符:
&=|=^=>>=<<=
例如:a&=b等價(jià)于a=a&ba<<=2等價(jià)于a=a<<23.12不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算
如果兩個(gè)操作數(shù)長(zhǎng)度不同,則系統(tǒng)會(huì)將兩者按右端對(duì)齊。長(zhǎng)度小者擴(kuò)充成大者長(zhǎng)度。當(dāng)操作數(shù)是unsigned時(shí),左端填充0;否則,左端填充原符號(hào)位。例如:shortinta=1;charb=-5;計(jì)算a&b則b也擴(kuò)充成與a長(zhǎng)度相等,左端填充1。
a:0000000000000001
b:1111111111111011
a&b:0000000000000001a|b:11111111111110113.12位運(yùn)算舉例例取一個(gè)整數(shù)a從右端開始的4-7
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 論文課題申報(bào)書
- 音樂陶笛課題立項(xiàng)申報(bào)書
- 建黨精神課題申報(bào)書
- 古琴課題申報(bào)書
- 快樂讀書吧課題申報(bào)書
- 賣房貸款合同范本
- 咨詢費(fèi)購(gòu)銷合同范本
- 共享充電寶股合同范本
- 70歲以上用工合同范例
- 品牌童裝贈(zèng)與合同范本
- 三級(jí)醫(yī)院人力資源配置【醫(yī)院人力資源配置方案】
- 《寧夏閩寧鎮(zhèn):昔日干沙灘今日金沙灘》教案- 2023-2024學(xué)年高教版(2023)中職語文職業(yè)模塊
- 數(shù)學(xué)家華羅庚課件
- 彩票風(fēng)險(xiǎn)評(píng)估與控制
- 《中國(guó)肌內(nèi)效貼技術(shù)臨床應(yīng)用專家共識(shí)》學(xué)習(xí)分享
- 片上互連優(yōu)化與總線接口設(shè)計(jì)
- 高鈣血癥護(hù)理查房課件
- 圍填海項(xiàng)目生態(tài)保護(hù)修復(fù)方案編制技術(shù)指南(試行)
- 2024年中國(guó)包子行業(yè)發(fā)展前景及投資前景預(yù)測(cè)報(bào)告(智研咨詢)
- 物體打擊傷亡事故應(yīng)急處置卡
- 2024-2030年中國(guó)飛機(jī)AFP和ATL復(fù)合材料行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
評(píng)論
0/150
提交評(píng)論