Arduino 語法手冊備課講稿_第1頁
Arduino 語法手冊備課講稿_第2頁
Arduino 語法手冊備課講稿_第3頁
Arduino 語法手冊備課講稿_第4頁
Arduino 語法手冊備課講稿_第5頁
已閱讀5頁,還剩163頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Arduino語法手冊

Arduino的程序可以劃分為三個主要部分:結(jié)構(gòu)、

變量(變量與常量)、函數(shù)。

結(jié)構(gòu)部分;(分號)

、結(jié)構(gòu)。(花括號)

setup()〃(單行注釋)

loop()/**/(多行注釋)

二、結(jié)構(gòu)控制#define

ifttinclude

if...else四、算數(shù)運(yùn)算符

for二(賦值運(yùn)算符)

switchcase+(加)

while-(減)

do...while*(乘)

break/(除)

continue%(模)

return五、比較運(yùn)算符

goto二(等于)

三、擴(kuò)展語法!二(不等于)

<(小于)一(decrement)

>(大于)+=(compoundaddi

<=(小于等于)tion)

〉二(大于等于)-=(compoundsubt

六、布爾運(yùn)算符raction)

&&(與)*=(compoundmult

II(或)iplication)

!(非)/=(compounddivi

七、指針運(yùn)算符sion)

*取消引用運(yùn)算符&=(compoundbitw

&引用運(yùn)算符iseand)

八、位運(yùn)算符|=(compoundbitw

&(bitwiseand)iseor)

|(bitwiseor)

(bitwisexor)

p(bitwisenot)變量部分

<<(bitshiftleft十、常量

)HIGH|LOW(引腳電

>>(bitshiftrigh壓定義)

t)INPUT|OUTPUT(數(shù)

九、復(fù)合運(yùn)算符字引腳(Digitalpins)

++(increment)定義)

true|false(邏輯double(雙精度浮

層定義)點(diǎn)數(shù))

integerconstantstring

s(整數(shù)常量)(chararray/字符串)

floatingpointcoStringobject

nstants(浮點(diǎn)常量)(String類)

十一、數(shù)據(jù)類型array(數(shù)組)

void十二、數(shù)據(jù)類型轉(zhuǎn)換

boolean(布爾)char()

char(有號數(shù)據(jù)類byte()

型)int()

unsignedchar(無word()

符號數(shù)據(jù)類型)long()

byte(無符號數(shù))float()

int(整型)十三、變量作用域&修

unsignedint(無飾符

符號整型)variablescope

word(變量的作用域)

long(長整數(shù)型)static(靜態(tài)變

unsignedlong(無量)

符號長整數(shù)型)volatile

float(浮點(diǎn)型數(shù))const

十四、輔助工具millis()

sizeof()micros()

delay()

delayMicrosecon

函數(shù)部分ds()

十五、數(shù)字I/O十九、數(shù)學(xué)運(yùn)算

pinMode()min()

digitalWrite()max()

digitalRead()abs()

十六、模擬I/Oconstrain()

analogReferencemap()

0pow()

analogRead()sqrt()

analogWrite()PWceil()

Mexp()

十七、高級I/Ofabs()

tone()floor()

noTone()fma()

shiftOut()fmax()

shiftin()fmin()

pulseln()fmod()

十八、時間Idexp()

logOrandomSeed()

loglO()random()

round()二十二、位操作

signbit()lowByte()

sq()highByte()

square()bitRead()

trunc()bitWrite()

二十、三角函數(shù)bitSet0

sin()bitClear()

cos()bit()

tan()二十三、設(shè)置中斷函數(shù)

acos()attachlnterrupt

asin()0

atan()detachinterrupt

atan2()0

cosh()二十四、開關(guān)中斷

degrees()interrupts()(中

hypot()斷)

radians()noInterrupts()

sinh()(禁止中斷)

tanh()二十五、通訊

二H\隨機(jī)數(shù)Serial

if(Serial)Keyboard(鼠標(biāo))

Stream

二十六、USB(僅適用

于Leonardo和Due)

Mouse(鍵盤)

結(jié)構(gòu)部分

一、結(jié)構(gòu)

setup()

在Arduino中程序運(yùn)行時將首先調(diào)用

setup。函數(shù)。用于初始化變量、設(shè)置針腳的輸

出'輸入類型、配置串口、引入類庫文件等等。

每次Arduino上電或重啟后,setup函數(shù)只運(yùn)行

一次。

示例

intbuttonPin=3;

voidsetup()

(

pinMode(buttonPin,INPUT);

)

voidloop()

(

//...

loop()

在setup。函數(shù)中初始化和定義了變量,然

后執(zhí)行l(wèi)oop。函數(shù)。顧名思義,該函數(shù)在程序運(yùn)

行過程中不斷的循環(huán),根據(jù)一些反饋,相應(yīng)改變

執(zhí)行情況。通過該函數(shù)動態(tài)控制Arduino主控板。

示例

intbuttonPin=3;//setup中初始化串口和

按鍵針腳.

voidsetup()

(

beginSerial(9600);

pinMode(buttonPin,INPUT);

)

//loop中每次都檢查按鈕,如果按鈕被按下,

就發(fā)送信息到串口

voidloop()

(

if(digitalRead(buttonPin)==HIGH)

serialWrite('H');

else

serialWrite(!Lf);

delay(1000);

二、結(jié)構(gòu)控制

if

if(條件判斷語句)和=、!=、〈、〉(比較

運(yùn)算符)

if語句與比較運(yùn)算符一起用于檢測某個條

件是否達(dá)成,如某輸入值是否在特定值之上等。

if語句的語法是:

if(someVariable>50)

〃執(zhí)行某些語句

}

本程序測試someVariable變量的值是否大

于50。當(dāng)大于50時,執(zhí)行一些語句。換句話說,

只要if后面括號里的結(jié)果(稱之為測試表達(dá)式)

為真,則執(zhí)行大括號中的語句(稱之為執(zhí)行語句

塊);若為假,則跳過大括號中的語句。if語句

后的大括號可以省略。若省略大括號,則只有一

條語句(以分號結(jié)尾)成為執(zhí)行語句。

if(x>120)digitalWrite(LEDpin,HIGH);

if(x>120)

digitalWrite(LEDpin,HIGH);

if(x>120){digitalWrite(LEDpin,HIGH);}

if(x>120){

digitalWrite(LEDpinl,HIGH);

digitalWrite(LEDpin2,HIGH);

}〃以上所有書寫方式都正確

在小括號里求值的表達(dá)式,需要以下操作

符:

比較運(yùn)算操作符:

x二二y(x等于y)

x!=y(x不等于y)

x<y(x小于y)

x>y(x大于y)

x<=y(x小于等于y)

x>=y(x大于等于y)

警告:

注意使用賦值運(yùn)算符的情況(如if(x=10))。

一個J”表示的是賦值運(yùn)算符,作用是將X的

值設(shè)為10(將值10放入X變量的內(nèi)存中)。兩個

“二”表示的是比較運(yùn)算符(如if(x=10)),用

于測試x和10是否相等。后面這個語句只有x

是10時才為真,而前面賦值的那個語句則永遠(yuǎn)

為真。

這是因?yàn)镃語言按以下規(guī)則進(jìn)行運(yùn)算

if(x=10):10賦值給x(只要非0的數(shù)賦值的語

句,其賦值表達(dá)式的值永遠(yuǎn)為真),因此x現(xiàn)在

值為10。此時if的測試表達(dá)式值為10,該值永

遠(yuǎn)為真,因?yàn)榉?值永遠(yuǎn)為真。所以,if(x=10)

將永遠(yuǎn)為真,這就不是我們運(yùn)行if所期待的結(jié)

果。另外,x被賦值為10,這也不是我們所期待

的結(jié)果。

if的另外一種分支條件控制結(jié)構(gòu)是

if...else形式。

2.2if...else

if/else是比if更為高級的流程控制語句,

它可以進(jìn)行多次條件測試。比如,檢測模擬輸入

的值,當(dāng)它小于500時該執(zhí)行哪些操作,大于或

等于500時執(zhí)行另外的操作。代碼如下:

if(pinFiveInput<500)

{

〃執(zhí)行A操作

}

else

{

〃執(zhí)行B操作

}

else可以進(jìn)行額外的if檢測,所以多個互

斥的條件可以同時進(jìn)行檢測。

測試將一個一個進(jìn)行下去,直到某個測試結(jié)

果為真,此時該測試相關(guān)的執(zhí)行語句塊將被運(yùn)

行,然后程序就跳過剩下的檢測,直接執(zhí)行到

if/else的下一條語句。當(dāng)所有檢測都為假時,

若存在else語句塊,將執(zhí)行默認(rèn)的else語句塊。

注意elseif語句塊可以沒有else語句塊。

elseif分支語句的數(shù)量無限制。

if(pinFiveInput<500)

〃執(zhí)行A操作

elseif(pinFiveInput>=1000)

{

〃執(zhí)行B操作

}

else

{

〃執(zhí)行C操作

}

另外一種進(jìn)行多種條件分支判斷的語句是

switchcase語句。

for

for語句

描述

for語句用于重復(fù)執(zhí)行一段在花括號之內(nèi)的

代碼。通常使用一個增量計數(shù)器計數(shù)并終止循

環(huán)。for語句用于重復(fù)性的操作非常有效,通常

與數(shù)組結(jié)合起來使用來操作數(shù)據(jù)、引腳。

for循環(huán)開頭有3個部分:

(初始化;條件;增量計數(shù)){

〃語句

}

“初始化”只在循環(huán)開始執(zhí)行一次。每次循

環(huán),都會檢測一次條件;如果條件為真,則執(zhí)行

語句和“增量計數(shù)”,之后再檢測條件。當(dāng)條件

為假時,循環(huán)終止。

例子

〃用PWM引腳將LED變暗

intPWMpin=10;〃將一個LED與47。電阻串

聯(lián)接在10腳

voidsetup()

〃無需設(shè)置

voidloop()

for(inti=0;i<=255;i++)

{

analogWrite(PWMpin,i);

delay(10);

編程提示

C語言的for循環(huán)語句比BASIC和其他電腦

編程語言的for語句更靈活。除了分號以外,其

他3個元素都能省略。同時,初始化,條件,增

量計算可以是任何包括無關(guān)變量的有效C語句,

任何C數(shù)據(jù)類型包括floato這些不尋常的for

語句可能會解決一些困難的編程問題。

例如,在增量計數(shù)中使用乘法可以得到一個

等比數(shù)列:

for(intx=2;x<100;x=x*

printin(x);

生成:2,3,4,6,9,13,19,28,42,63,94

另一個例子,使用for循環(huán)使LED產(chǎn)生漸亮漸滅

的效果:

voidloop()

{

intx=l;

for(inti=0;i>-l;i=i+x)

{

analogWrite(PWMpin,i);

if(i==255)x=-1;〃在峰值轉(zhuǎn)變方向

delay(10);

switchcase

switch/case語句

和if語句相同,switch…case通過程序員

設(shè)定的在不同條件下執(zhí)行的代碼控制程序的流

程。特別地,switch語句將變量值和case語句

中設(shè)定的值進(jìn)行比較。當(dāng)一個case語句中的設(shè)

定值與變量值相同時,這條case語句將被執(zhí)行。

關(guān)鍵字break可用于退出switch語句,通

常每條case語句都以break結(jié)尾。如果沒有

break語句,switch語句將會一直執(zhí)行接下來的

語句(一直向下)直到遇見一個break,或者直

到switch語句結(jié)尾。

例子

switch(var){

easel:

〃當(dāng)var等于1時,執(zhí)行一些語句

break;

case2

〃當(dāng)var等于2時,執(zhí)行一些語句

break;

default:

〃如果沒有任何匹配,執(zhí)行default

//default可有可不有

}

語法

switch(var){

caselabel:

〃聲明

break;

caselabel:

〃聲明

break;

default:

〃聲明

)

參數(shù)

var:用于與下面的case中的標(biāo)簽進(jìn)行比較

的變量值

label:與變量進(jìn)行比較的值

while

while循環(huán)

描述

while循環(huán)會無限的循環(huán),直到括號內(nèi)的判

斷語句變?yōu)榧佟1仨氁心芨淖兣袛嗾Z句的東

西,要不然while循環(huán)將永遠(yuǎn)不會結(jié)束。這在您

的代碼表現(xiàn)為一個遞增的變量,或一個外部條

件,如傳感器的返回值。

語法

while(表達(dá)){

〃語句

參數(shù)

表達(dá):為真或?yàn)榧俚囊粋€計算結(jié)果

例子

var=O;

while(var<200){

〃重復(fù)一件事200遍

var++

do...while

do…while循環(huán)與while循環(huán)運(yùn)行的方式是

相近的,不過它的條件判斷是在每個循環(huán)的最

后,所以這個語句至少會被運(yùn)行一次,然后才被

結(jié)束。

do

〃語句

}while(測試條件);

例子

do

{

delay(50);〃等待傳感器穩(wěn)定

X=readSensors();〃檢查傳感器取值

}while(X<100)"/當(dāng)x小于100時,繼續(xù)

、一/一

運(yùn)仃

break

break用于退出do,for,while循環(huán),能繞

過一般的判斷條件。它也能夠用于退出switch

語句。

例子

for(x=0;x<255;x++)

(

digitalWrite(PWMpin,x);

sens=analogRead(sensorPin);

if(sens>threshold){〃超出探測范圍

x=0;

break;

)

delay(50);

}

continue

continue語句跳過當(dāng)前循環(huán)中剩余的迭代

部分(do,for或while)。它通過檢查循環(huán)條件

表達(dá)式,并繼續(xù)進(jìn)行任何后續(xù)迭代。

例子

for(x=0;x<255;x++)

(

if(x>40&&x<120){〃當(dāng)x在40與120之間

時,跳過后面兩句,即迭代。

continue;

)

digitalWrite(PWMpin,x);

delay(50);

return

終止一個函數(shù),如有返回值,將從此函數(shù)返

回給調(diào)用函數(shù)。

語法

return;

returnvalue;〃兩種形式均可

參數(shù)

value:任何變量或常量的類型

例子

一個比較傳感器輸入閾值的函數(shù)

intcheckSensor(){

if(analogRead(0)>400){

returnl;)

else{

returnO;

}

}

return關(guān)鍵字可以很方便的測試一段代碼,

而無需“commentout(注釋掉)"大段的可能存在

bug的代碼。

voidloop(){

〃寫入漂亮的代碼來測試這里。

return;

//剩下的功能異常的程序

//return后的代碼永遠(yuǎn)不會被執(zhí)行

)

goto

程序?qū)某绦蛑幸延械臉?biāo)記點(diǎn)開始運(yùn)行

語法

label:

gotolabel;〃從label處開始運(yùn)行

提示

不要在C語言中使用goto編程,某些C編

程作者認(rèn)為goto語句永遠(yuǎn)是不必要的,但用得

好,它可以簡化某些特定的程序。許多程序員不

同意使用goto的原因是,通過毫無節(jié)制地使用

goto語句,很容易創(chuàng)建一個程序,這種程序擁有

不確定的運(yùn)行流程,因而無法進(jìn)行調(diào)試。

的確在有的實(shí)例中g(shù)oto語句可以派上用場,

并簡化代碼。例如在一定的條件用if語句來跳

出高度嵌入的for循環(huán)。

例子

for(byter=0;r<255;r++){

for(byteg=255;g>-l;g--){

for(byteb=0;b<255;b++){

if(analogRead(0)>250){

gotobailout;

}

〃更多的語句...

bailout:

三、擴(kuò)展語法

;(分號)

用于表示一句代碼的結(jié)束。

例子

inta=13;

提示

在每一行忘記使用分號作為結(jié)尾,將導(dǎo)致一

個編譯錯誤。錯誤提示可能會清晰的指向缺少分

號的那行,也可能不會。如果彈出一個令人費(fèi)解

或看似不合邏輯的編譯器錯誤,第一件事就是在

錯誤附近檢查是否缺少分號。

3.2{}(花括號)

大括號(也稱為“括號”或“大括號”)是C

編程語言中的一個重要組成部分。它們被用來區(qū)

分幾個不同的結(jié)構(gòu),下面列出的,有時可能使初

學(xué)者混亂。

左大括號必須與一個右大括號形

成閉合。這是一個常常被稱為括號平衡的條件。

在ArduinoIDE(集成開發(fā)環(huán)境)中有一個方便的

功能來檢查大括號是否平衡。只需選擇一個括

號,甚至單擊緊接括號的插入點(diǎn),就能知道這個

括號的“伴侶括號二

目前此功能稍微有些錯誤,因?yàn)镮DE會經(jīng)常

會認(rèn)為在注釋中的括號是不正確的。

對于初學(xué)者,以及由BASIC語言轉(zhuǎn)向?qū)W習(xí)C

語言的程序員,經(jīng)常不清楚如何使用括號。畢竟,

大括號還會在“return函數(shù)"、"endif條件句”

以及"loop函數(shù)”中被使用到。

由于大括號被用在不同的地方,這有一種很

好的編程習(xí)慣以避免錯誤:輸入一個大括號后,

同時也輸入另一個大括號以達(dá)到平衡。然后在你

的括號之間輸入回車,然后再插入語句。這樣一

來,你的括號就不會變得不平衡了。

不平衡的括號常可導(dǎo)致許多錯誤,比如令人

費(fèi)解的編譯器錯誤,有時很難在一個程序找到這

個錯誤。由于其不同的用法,括號也是一個程序

中非常重要的語法,如果括號發(fā)生錯誤,往往會

極大地影響了程序的意義。

大括號中的主要用途

功能

voidmyfunction(datatypeargument){

statements(s)

}

循環(huán)

while(booleanexpression)

statement(s)

do

{

statement(s)

}

while(booleanexpression);

for(initialisation;terminalionconditi

on;incrementingexpr)

(

statement(s)

)

條件語句

if(booleanexpression)

|

statement(s)

elseif(booleanexpression)

statement(s)

else

(

statement(s)

//(單行注釋)

Comments(注釋)

注釋用于提醒自己或他人程序是如何工作

的。它們會被編譯器忽略掉,也不會傳送給處理

器,所以它們在Atmega芯片上不占用體積。注

釋的唯一作用就是使你自己理解或幫你回憶你

的程序是怎么工作的或提醒他人你的程序是如

何工作的。編寫注釋有兩種寫法:

例子

x=5;〃這是一條注釋斜杠后面本行內(nèi)的所

有東西是注釋

/*這是多行注釋-用于注釋一段代碼

if(gwb-0){〃在多行注釋內(nèi)可使用單行注

x=3;/*但不允許使用新的多行注釋-這是無

效的

〃別忘了注釋的結(jié)尾符號-它們是成對出現(xiàn)

的!

*/

小提示

當(dāng)測試代碼的時候,注釋掉一段可能有問題

的代碼是非常有效的方法。這能使這段代碼成為

注釋而保留在程序中,而編譯器能忽略它們。這

個方法用于尋找問題代碼或當(dāng)編譯器提示出錯

或錯誤很隱蔽時很有效。

/**/(多行注釋)

Comments(注釋)

注釋用于提醒自己或他人程序是如何工作

的。它們會被編譯器忽略掉,也不會傳送給處理

器,所以它們在Atmega芯片上不占用體積。注

釋的唯一作用就是使你自己理解或幫你回憶你

的程序是怎么工作的或提醒他人你的程序是如

何工作的。編寫注釋有兩種寫法:

例子

x=5;〃這是一條注釋斜杠后面本行內(nèi)的所

有東西是注釋

/*這是多行注釋-用于注釋一段代碼

if(gwb==O){〃在多行注釋內(nèi)可使用單行注

x=3;/*但不允許使用新的多行注釋-這是無

效的

}

〃別忘了注釋的結(jié)尾符號-它們是成對出現(xiàn)

的!

*/

小提示

當(dāng)測試代碼的時候,注釋掉一段可能有問題

的代碼是非常有效的方法。這能使這段代碼成為

注釋而保留在程序中,而編譯器能忽略它們。這

個方法用于尋找問題代碼或當(dāng)編譯器提示出錯

或錯誤很隱蔽時很有效。

ttdefine

#define是一個很有用的C語法,它允許程

序員在程序編譯之前給常量命名。在Arduino中,

定義的常量不會占用芯片上的任何程序內(nèi)存空

間。在編譯時編譯器會用事先定義的值來取代這

些常量。

然而這樣做會產(chǎn)生一些副作用,例如,一個

已被定義的常量名已經(jīng)包含在了其他常量名或

者變量名中。在這種情況下,文本將被#(10日血€1

定義的數(shù)字或文本所取代。

通常情況下,優(yōu)先考慮使用const關(guān)鍵字替

代#(^門腔來定義常量。

Arduino擁有和C相同的語法規(guī)范。

語法

#define常量名常量值注意,#是必須的。

例子

#defineledPin3

〃在編譯時,編譯器將使用數(shù)值3取代任何

用到ledPin的地方。

提示

在#(1?直世聲明后不能有分號。如果存在分

號,編譯器會拋出語義不明的錯誤,甚至關(guān)閉頁

面。

#defineledPin3;〃這是一種錯誤寫法

類似的,在#(^£ine聲明中包含等號也會產(chǎn)

生語義不明的編譯錯誤從而導(dǎo)致關(guān)閉頁面。

#defineledPin=3〃這是一種錯誤寫法

Sinclude

#include用于調(diào)用程序以外的庫。這使得程

序能夠訪問大量標(biāo)準(zhǔn)C庫,也能訪問用于

arduino的庫。AVRC庫(Arduino基于AVR標(biāo)準(zhǔn)

語法)語法手冊請點(diǎn)擊這里。注意#include和

#define一樣,不能在結(jié)尾加分號,如果你加了

分號編譯器將會報錯。

例子

此例包含了一個庫,用于將數(shù)據(jù)存放在

flash空間內(nèi)而不是ram內(nèi)。這為動態(tài)內(nèi)存節(jié)約

了空間,大型表格查表更容易實(shí)現(xiàn)。

ftinclude

proguintl6_tmyConstants[]PROGMEM={0,

21140,702,9128,0,25764,8456,

0,0,0,0,0,0,0,0,29810,8968,29762,2976

2,4500};

四、算數(shù)運(yùn)算符

=(賦值運(yùn)算符)

二賦值運(yùn)算符(單等號)

賦值運(yùn)算符(單等號)

將等號右邊的數(shù)值賦值給等號左邊的變量

在C語言中,單等號被稱為賦值運(yùn)算符,它

與數(shù)學(xué)上的等號含義不同,賦值運(yùn)算符告訴單片

機(jī),將等號的右邊的數(shù)值或計算表達(dá)式的結(jié)果,

存儲在等號左邊的變量中。

例子

intsensVal;〃聲明一個名為sensVal的整

型變量

senVal=analogRead(0);〃將模擬引腳0

的輸入電壓存儲在SensVal變量中

編程技巧

要確保賦值運(yùn)算符(二符號)左側(cè)的變量能

夠儲存右邊的數(shù)值。如果沒有大到足以容納右邊

的值,存儲在變量中的值將會發(fā)生錯誤。

不要混淆賦值運(yùn)算符匚](單等號)與比較

運(yùn)算符匚二](雙等號),認(rèn)為這兩個表達(dá)式是相

等的。

+(加)

加,減,乘,除

描述

這些運(yùn)算符返回兩個操作數(shù)的和,差,乘積,

商。這些運(yùn)算是根據(jù)操作數(shù)的數(shù)據(jù)類型來計算的,

比如9和4都是int類型,所以9/4結(jié)果是2.這

也就代表如果運(yùn)算結(jié)果比數(shù)據(jù)類型所能容納的

范圍要大的話,就會出現(xiàn)溢出(例如.1加上一個

整數(shù)int類型32,767結(jié)果變成-32,768)。如果

操作數(shù)是不同類型的,結(jié)果是“更大”的那種數(shù)

據(jù)類型。如果操作數(shù)中的其中一個是float類型

或者double類型,就變成了浮點(diǎn)數(shù)運(yùn)算。

例子

y=y+3;

x=x-7;

i=j*6;

r=r/5;

Syntax

result=valuel+value2;

result=valuel-value2;

result=valuel*value2;

result=valuel/value2;

Parameters:

valuel:任何常量或者變量,value2:任何常

量或者變量

編程小提示

整型常量的默認(rèn)值是int類型,所以一些整

型常量(定義中)的計算會導(dǎo)致溢出.(比

如:60*1000會得到一個負(fù)數(shù)結(jié)果.那么

if(60*1000>0),if得到的是一個false值。

在選擇變量的數(shù)據(jù)類型時,一定要保證變量

類型的范圍要足夠大,以至于能容納下你的運(yùn)算

結(jié)果。

要知道你的變量在哪個點(diǎn)會“翻身“,兩個

方向上都得注意.如:(0T)或(0—32768)

一些數(shù)學(xué)上的分?jǐn)?shù)處理,要用浮點(diǎn)數(shù),但其

缺點(diǎn)是:占用字節(jié)長度大,運(yùn)算速度慢。

使用類型轉(zhuǎn)換符,例如(int)myFloat將一個

變量強(qiáng)制轉(zhuǎn)換為int類型。

-(減)

詳見+(加)

*(乘)

詳見+(加)

/(除)

詳見+(加)

%(取模)

描述

一個整數(shù)除以另一個數(shù),其余數(shù)稱為模。它

有助于保持一個變量在一個特定的范圍(例如數(shù)

組的大小)。

語法

結(jié)果二被除數(shù)%除數(shù)

參數(shù)

被除數(shù):一個被除的數(shù)字

除數(shù):一個數(shù)字用于除以其他數(shù)

返回

余數(shù)(模)

舉例

X=7%5;//X為2

X=9%5;//X為4

X=5%5;//X為0

X=4%5;//X為4

示例代碼

/*通過循環(huán)計算1到10的模*/

intvalues[10];

inti=O;

voidsetup(){

voidloop()

{

values[i]=analogRead(0);

i二(i+1)%10;〃取模運(yùn)算

)

提示

模運(yùn)算符對浮點(diǎn)數(shù)不起作用。

五、比較運(yùn)算符

=(等于)

if(條件判斷語句)和=、!=、〈、〉(比較

運(yùn)算符)

if語句與比較運(yùn)算符一起用于檢測某個條

件是否達(dá)成,如某輸入值是否在特定值之上等。

if語句的語法是:

if(someVariable>50)

〃執(zhí)行某些語句

本程序測試someVariable變量的值是否大

于50。當(dāng)大于50時,執(zhí)行一些語句。換句話說,

只要if后面括號里的結(jié)果(稱之為測試表達(dá)式)

為真,則執(zhí)行大括號中的語句(稱之為執(zhí)行語句

塊);若為假,則跳過大括號中的語句。if語句

后的大括號可以省略。若省略大括號,則只有一

條語句(以分號結(jié)尾)成為執(zhí)行語句。

if(x>120)digitalWrite(LEDpin,HIGH);

if(x>120)

digitalWrite(LEDpin,HIGH);

if(x>120){digitalWrite(LEDpin,HIGH);)

if(x>120){

digitalWrite(LEDpinl,HIGH);

digitalWrite(LEDpin2,HIGH);

}〃以上所有書寫方式都正確

在小括號里求值的表達(dá)式,需要以下操作

符:

比較運(yùn)算操作符:

x==y(x等于y)

x!=y(x不等于y)

x<y(x小于y)

x>y(x大于y)

x<=y(x小于等于y)

x>=y(x大于等于y)

警告

注意使用賦值運(yùn)算符的情況(如if(x=10))o

一個“二”表示的是賦值運(yùn)算符,作用是將x的

值設(shè)為10(將值10放入x變量的內(nèi)存中)。兩個

表示的是比較運(yùn)算符(如if(x=10)),用

于測試x和10是否相等。后面這個語句只有x

是10時才為真,而前面賦值的那個語句則永遠(yuǎn)

為真。

這是因?yàn)镃語言按以下規(guī)則進(jìn)行運(yùn)算

if(x=10):10賦值給x(只要非0的數(shù)賦值的語

句,其賦值表達(dá)式的值永遠(yuǎn)為真),因此x現(xiàn)在

值為10。此時if的測試表達(dá)式值為10,該值永

遠(yuǎn)為真,因?yàn)榉?值永遠(yuǎn)為真。所以,if(x=10)

將永遠(yuǎn)為真,這就不是我們運(yùn)行if所期待的結(jié)

果。另外,x被賦值為10,這也不是我們所期待

的結(jié)果。

if的另外一種分支條件控制結(jié)構(gòu)是

if...else形式。

!=(不等于)

詳見=(等于)

<(小于)

詳見二二(等于)

>(大于)

詳見=(等于)

<=(小于等于)

詳見=(等于)

>=(大于等于)

詳見:(等于)

六、布爾運(yùn)算符

&&(與)

布爾運(yùn)算符

這些運(yùn)算符可以用于if條件句中。

&&(邏輯與)

只有兩個運(yùn)算對象為“真”,才為“真”,如:

if(digitalRead(2)==HIGH&&digitalRead(

3)=HIGH){〃讀取兩個開關(guān)的電平

//...

}

如果當(dāng)兩個輸入都為高電平,則為“真

II(邏輯或)

只要一個運(yùn)算對象為“真”,就為“真”,如:

if(x>0||y>0){

//...

)

如果x或y是大于0,則為“真

!(邏輯非)

如果運(yùn)算對象為“假”,則為“真”,例如

if(!x){

//...

)

如果x為“假”,則為真(即如果x等于0)。

警告

千萬不要誤以為,符號為&(單符號)的位運(yùn)

算符“與“就是布爾運(yùn)算符的“與”符號為&&(雙

符號)。他們是完全不同的符號。

同樣,不要混淆布爾運(yùn)算符II(雙豎)與位

運(yùn)算符“或”符號為I(單豎)。

位運(yùn)算符?(波浪號)看起來與布爾運(yùn)算符

not有很大的差別?。ㄕ绯绦騿T說:“驚嘆號”

或“bang”),但你還是要確定哪一個運(yùn)算符是

你想要的。

舉例

if(a〉=10&&a〈=20){}〃如果a的值在10至

20之間,則為“真”

II(或)

詳見&&(與)

!(非)

詳見&&(與)

七、指針運(yùn)算符

*取消引用運(yùn)算符

指針運(yùn)算符

&(取地址)和*(取地址所指的值)

指針對C語言初學(xué)者來說是一個比較復(fù)雜的

內(nèi)容,但是編寫大部分arduin。代碼時可以不用

涉及到指針。然而,操作某些數(shù)據(jù)結(jié)構(gòu)時,使用

指針能夠簡化代碼,但是指針的操作知識很難在

工具書中找到,可以參考C語言相關(guān)工具書。

&引用運(yùn)算符

詳見*取消引用運(yùn)算符

八、位運(yùn)算符

&(按位與)

按位與(&)

按位操作符對變量進(jìn)行位級別的計算。它們

能解決很多常見的編程問題。下面的材料大多來

自這個非常棒的按位運(yùn)算指導(dǎo)。

說明和語法

下面是所有的運(yùn)算符的說明和語法。進(jìn)一步

的詳細(xì)資料,可參考教程。

按位與(&)

位操作符與在C++中是一個&符,用在兩個整

型變量之間。按位與運(yùn)算符對兩側(cè)的變量的每一

位都進(jìn)行運(yùn)算,規(guī)則是:如果兩個運(yùn)算元都是1,

則結(jié)果為1,否則輸出0.另一種表達(dá)方式:

0011運(yùn)算元1

0101運(yùn)算元2

0001(運(yùn)算元1&運(yùn)算元2)-返回結(jié)果

在Arduino中,int類型為16位,所以在兩

個int表達(dá)式之間使用&會進(jìn)行16個并行按位與

計算。代碼片段就像這樣:

inta二92;〃二進(jìn)制:0000000001011100

intb=101;〃二進(jìn)制:0000000001100101

intc=a&b;〃結(jié)果:0000000001000100,或10

進(jìn)制的68

a和b的16位每位都進(jìn)行按位與計算,計算

結(jié)果存在c中,二進(jìn)制結(jié)果是01000100,十進(jìn)制

結(jié)果是68.

按位與最常見的作用是從整型變量中選取

特定的位,也就是屏蔽。見下方的例子。

按位或(I)

按位或操作符在C++中是|。和&操作符類似,

I操作符對兩個變量的為一位都進(jìn)行運(yùn)算,只是

運(yùn)算規(guī)則不同。按位或規(guī)則:只要兩個位有一個

為1則結(jié)果為1,否則為0o換句話說:

0011運(yùn)算元1

0101運(yùn)算元2

0111(運(yùn)算元1|運(yùn)算元2)-返回的結(jié)果

這里是一個按位或運(yùn)算在C++代碼片段:

inta二92;〃二進(jìn)制:0000000001011100

intb=101;〃二進(jìn)制:0000000001100101

intc二a|b;〃結(jié)果:0000000001HH01,或十

進(jìn)制的125

示例程序

按位與和按位或運(yùn)算常用于端口的讀取-修

改-寫入。在微控制器中,一個端口是一個8位

數(shù)字,它用于表示引腳狀態(tài)。對端口進(jìn)行寫入能

同時操作所有引腳。

PORTD是一個內(nèi)置的常數(shù),是指

0,1,2,3,4,5,6,7數(shù)字引腳的輸出狀態(tài)。如果某

一位為1,著對應(yīng)管腳為HIGHo(此引腳需要先

用pinMode。命令設(shè)置為輸出)因此如果我們這

樣寫,P0RTD=B00110001;則引腳2、3、7狀態(tài)

為HIGH。這里有個小陷阱,我們可能同時更改了

引腳0、1的狀態(tài),引腳0、1是Arduin。串行通

信端口,因此我們可能會干擾通信。

我們的算法的程序是:

讀取PORT并用按位與清除我們想要控制的

引腳

用按位或?qū)ORTD和新的值進(jìn)行運(yùn)算

inti;〃計數(shù)器

intj;

voidsetup()

DDRD=DDRD|BHH1100;〃設(shè)置引腳2~7的方

向,0、1腳不變(xx|00==xx)

〃效果和pinMode(pin,OUTPUT)設(shè)置2?7腳

為輸出一樣

(9600);

voidloop(){

for(i=0;i<64;i++)(

PORTD=P0RTD&B00000011;〃清除2~7位,0、

1保持不變(xx&ll==xx)

產(chǎn)(i〈〈2);〃將變量左移為?2?7腳,避免0、

1腳

P0RTD=P0RTDIj;〃將新狀態(tài)和原端口狀態(tài)

結(jié)合以控制LED腳

BIN);〃輸出掩蓋以便調(diào)試

delay(100);

按位異或O

C++中有一個不常見的操作符叫按位異或,

也叫做X0R(通常讀作"eks-or”)。按位異或操

作符用'r表示。此操作符和按位或(|)很相

似,區(qū)別是如果兩個位都為1則結(jié)果為0:

0011運(yùn)算元1

0101運(yùn)算元2

0110(運(yùn)算元廠運(yùn)算元2)-返回的結(jié)果

按位異或的另一種解釋是如果兩個位值相

同則結(jié)果為0,否則為lo

下面是一個簡單的代碼示例:

intx二12;〃二進(jìn)制:1制0

inty二10;〃二進(jìn)制:1制0

intz二x,;〃二進(jìn)制:0110,或十進(jìn)制6

//Blink_Pin_5

〃演示“異或”

voidsetup(){

DDRD二DDRD|B00100000;〃設(shè)置數(shù)字腳5設(shè)置

為輸出

(9600);

voidloop(){

PORTD=PORT}B00100000;〃反轉(zhuǎn)第5位(數(shù)

字腳5),其他保持不變

delay(100);

}

I(按位或)

詳見&(按位與)

X按位異或)

詳見&(按位與)

~(按位非)

按位取反,)

按位取反在C++語言中是波浪號]與&(按

位與)和I(按位或)不同,按位取反使用在一

個操作數(shù)的右側(cè)。按位取反將操作數(shù)改變?yōu)樗?/p>

“反面”:0變?yōu)?,1變成0。例如:

Oloperandl

lO^operandl

inta=103;〃二進(jìn)制:0000000001100111

intb二?a;〃二進(jìn)

制:ininnioonooo=TO4

你可能會驚訝地看到結(jié)果為像-104這樣的

數(shù)字。這是因?yàn)檎麛?shù)型變量的最高位,即所謂的

符號位。如果最高位是1,這個數(shù)字將變?yōu)樨?fù)數(shù)。

這個正數(shù)和負(fù)數(shù)的編碼被稱為補(bǔ)。想了解更多信

息,請參考Wikipedia文章two1scomplement.

順便說一句,有趣的是,要注意對于任何整

數(shù)型操作數(shù)X,?X和-X-1是相同的。

有時,對帶有符號的整數(shù)型操作數(shù)進(jìn)行位操

作可以造成一些不必要的意外。

?(左移位運(yùn)算符)

bitshiftleft(?),bitshiftright(?)

描述

出自Playground的TheBitmathTutorial在

C++語言中有兩個移位運(yùn)算符:左移位運(yùn)算符

(?)和右移運(yùn)算符(?)。這些操作符可使左

運(yùn)算元中的某些位移動右運(yùn)算元中指定的位數(shù)。

想了解有關(guān)位的更多信息可以點(diǎn)擊這里。

語法

variable?number_of_bitsvariab1e?num

ber_of_bits

參數(shù)

variable-(byte,int,long)number_of_bit

sinteger<=32

例子

inta=5;〃二進(jìn)制數(shù):0000000000000101

intb=a〈〈3;〃二進(jìn)制數(shù):0000000000101000,

或十進(jìn)制數(shù):40

intc=b>>3;〃二進(jìn)制數(shù):0000000000000101,

或者說回到開始時的5

//當(dāng)你將x左移y位時(x?y),x中最左邊

的y位會逐個逐個的丟失:

inta=5;〃二進(jìn)制:0000000000000101

intb=a<<14;//二進(jìn)

制:0100000000000000-101中最左邊的1被丟棄

如果你確定位移不會引起數(shù)據(jù)溢出,你可以

簡單的把左移運(yùn)算當(dāng)做對左運(yùn)算元進(jìn)行2的右運(yùn)

算元次方的操作。例如,要產(chǎn)生2的次方,可使

用下面的方式:

1?0==1

1?1==2

1?2==4

1?3==8

???

1?8==256

1?9==512

10?1==1024

???

當(dāng)你將X右移y位(x?y),如果X最高位是

1,位移結(jié)果將取決于X的數(shù)據(jù)類型。如果X是

int類型,最高位為符號位,確定是否x是負(fù)數(shù)

或不是,正如我們上面的討論。如果x類型為

int,則最高位是符號位,正如我們以前討論過,

符號位表示x是正還是負(fù)。在這種情況下,由于

深奧的歷史原因,符號位被復(fù)制到較低位:

X=T6;〃二進(jìn)制:1111111111110000

Y=X>>3〃二進(jìn)制:1111111111111110

這種結(jié)果,被稱為符號擴(kuò)展,往往不是你想

要的行為。你可能希望左邊被移入的數(shù)是0。右

移操作對無符號整型來說會有不同結(jié)果,你可以

通過數(shù)據(jù)強(qiáng)制轉(zhuǎn)換改變從左邊移入的數(shù)據(jù):

X=T6;〃二進(jìn)制:1111111111110000

inty=(unsignedint)x>>3;//二進(jìn)

制:oooinninnno

如果你能小心的避免符號擴(kuò)展問題,你可以

將右移操作當(dāng)做對數(shù)據(jù)除2運(yùn)算。例如:

INT=1000;

Y=X?3;81000//1000整除8,使y=125

>>(右移位運(yùn)算符)

詳見〈〈(左移位運(yùn)算符)

九、復(fù)合運(yùn)算符

++(遞增)

++(遞增)/一(遞減)

描述

遞增或遞減一個變量

語法

x++;〃x自增1返回X的舊值

++x;//x自增1返回X的新值

X--;//x自減1返回X的舊值

--X;//x自減1返回X的新值

參數(shù)

X:int或long(可能是unsigned)

返回

變量進(jìn)行自增/自減操作后的原值或新值。

例子

x=2;

y=++x;〃現(xiàn)在x=3,y=3

y二x-;〃現(xiàn)在x=2,y還是3

一(遞減)

詳見++(遞增)

+=(復(fù)合加)

描述

執(zhí)行常量或變量與另一個變量的數(shù)學(xué)運(yùn)算。

+二等運(yùn)算符是以下擴(kuò)展語法的速記。

語法

X+二Y"/相當(dāng)于表達(dá)式X=X+Y;

X-二丫;〃相當(dāng)于表達(dá)式X=X-Y;

X*=Y;〃相當(dāng)于表達(dá)式X=X*Y;

X/二Y;〃相當(dāng)于表達(dá)式X二X/Y;

參數(shù)

X:任何變量類型

Y:任何變量類型或常數(shù)

例子

x=2;

x+=4;//x現(xiàn)在等于6

x-=3;//x現(xiàn)在等于3

x*=10;//x現(xiàn)在等于30

x/=2;//x現(xiàn)在等于15

-=(復(fù)合減)

詳見+=(復(fù)合加)

*=(復(fù)合乘)

詳見+二(復(fù)合加)

/=(復(fù)合除)

詳見+二(復(fù)合加)

&=(復(fù)合運(yùn)算按位與)

描述

復(fù)合運(yùn)算按位與運(yùn)算符(&二)經(jīng)常被用來

將一個變量和常量進(jìn)行運(yùn)算使變量某些位變?yōu)?/p>

Oo這通常被稱為“清算”或“復(fù)位”位編程指

南。

語法

x&二y;〃等價于x=x&y;

參數(shù)

x:char,int或long類型變量

Y:char,int或long類型常量

例如

首先,回顧一下按位與(&)運(yùn)算符

0011運(yùn)算元1

0101運(yùn)算元2

0001(運(yùn)算元1&運(yùn)算元2)-返回的結(jié)果

任何位與0進(jìn)行按位與操作后被清零,如果

myBite是變量

myByte&B00000000=0;

因此,任何位與1進(jìn)行“按位與運(yùn)算”后保

持不變

myByteBllllllll=myByte;

注意:因?yàn)槲覀冇梦徊僮鞣麃聿僮魑?,所?/p>

使用二進(jìn)制的變量會很方便。如果這些數(shù)值是其

他值將會得到同樣結(jié)果,只是不容易理解。同樣,

B00000000是為了標(biāo)示清楚,0在任何進(jìn)制中都

是0(恩。。有些哲學(xué)的味道)因此-清除(置零)

變量的任意位0和1,而保持其余的位不變,可

與常量Biniuoo進(jìn)行復(fù)合運(yùn)算按位與(&二)

10101010變量

11111lOOmask

10101000

變量不變位清零

將變量替換為x可得到同樣結(jié)果

XXXXXXXX變量

HllllOOmask

XXXXXXOO

變量不變位清零

同理

myByte=10101010;

myByte&=B1111100==B10101000;

1=(復(fù)合運(yùn)算按位或)

描述

復(fù)合按位或操作符(|二)經(jīng)常用于變量和常

量“設(shè)置”(設(shè)置為1),尤其是變量中的某一位。

語法

x|二y;〃等價于x=x|y;

參數(shù)

x:char,int或long類型

y:整數(shù),int或long類型

例如

首先,回顧一下OR(|)運(yùn)算符

0011運(yùn)算元1

0101運(yùn)算元2

0111(運(yùn)算元1|運(yùn)算元2)-返回的結(jié)果

如果變量myByte中某一位與0經(jīng)過按位或

運(yùn)算后不變。

myByte|B00000000=myByte;

與1經(jīng)過或運(yùn)算的位將變?yōu)?.

myBytelBlllliniBllinill;

因此-設(shè)置變量的某些位為0和1,而變量的

其他位不變,可與常量B00000011進(jìn)行按位與運(yùn)

算(1二)

10101010變量

00000011

10101011

變量保持不變位設(shè)置

接下來的操作相同,只是將變量用X代替

XXXXXXXX變量

0000001Imask

XXXXXX11

變量保持不變位設(shè)置

同上:

myByte=B10101010;

myByte|=B00000011==B10101011;

變量部分

十、常量

HIGH|LOW(引腳電壓定義)

引腳電壓定義,HIGH和LOW

當(dāng)讀取(read)或?qū)懭?write)數(shù)字引腳

時只有兩個可能的值:HIGH和LOW。

HIGH

HIGH(參考引腳)的含義取決于引腳(pin)

的設(shè)置,引腳定義為INPUT或OUTPUT時含義有

所不同。當(dāng)一個引腳通過pinMode被設(shè)置為

INPUT,并通過digitalRead讀取(read)時。

如果當(dāng)前引腳的電壓大于等于3V,微控制器將會

返回為HIGH。引腳也可以通過pinMode被設(shè)置為

INPUT,并通過digitalWrite設(shè)置為HIGH。輸入

引腳的值將被一個內(nèi)在的20K上拉電阻控制在

HIGH±,除非一個外部電路將其拉低到LOW。當(dāng)

一個引腳通過pinMode被設(shè)置為OUTPUT,并

digitalWrite設(shè)置為HIGH時,引腳的電壓應(yīng)在

5VO在這種狀態(tài)下,它可以輸出電流。例如,點(diǎn)

亮一個通過一串電阻接地或設(shè)置為LOW的

OUTPUT屬性引腳的LEDo

LOW

LOW的含義同樣取決于引腳設(shè)置,引腳定義

為INPUT或OUTPUT時含義有所不同。當(dāng)一個引

腳通過pinMode配置為INPUT,通過digitalRead

設(shè)置為讀取(read)時,如果當(dāng)前引腳的電壓小

于等于2V,微控制器將返回為LOW。當(dāng)一個引腳

通過pinMode配置為OUTPUT,并通過

digitalWrite設(shè)置為LOW時,引腳為0V。在這

種狀態(tài)下,它可以倒灌電流。例如,點(diǎn)亮一個通

過串聯(lián)電阻連接到+5V,或到另一個引腳配置為

OUTPUT.HIGH的的LED。

INPUT|OUTPUT(數(shù)字引腳(Digitalpins)定義)

數(shù)字引腳(Digitalpins)定義,INPUT和OUTPUT

數(shù)字引腳當(dāng)作INPUT或OUTPUT都可以。用

pinMode()方法使一個數(shù)字引腳從INPUT到

OUTPUT變化。

引腳(Pins)配置為輸入(Inputs)

Arduino(Atmega)引腳通過pinMode()配置

為輸入(INPUT)即是將其配置在一個高阻抗的

狀態(tài)。配置為INPUT的引腳可以理解為引腳取樣

時對電路有極小的需求,即等效于在引腳前串聯(lián)

一個100兆歐姆(Megohms)的電阻。這使得它們

非常利于讀取傳感器,而不是為LED供電。

引腳(Pins)配置為輸出(Outputs)

引腳通過pinMode()配置為輸出(OUTPUT)

即是將其配置在一個低阻抗的狀態(tài)。

這意味著它們可以為電路提供充足的電流。

Atmega引腳可以向其他設(shè)備/電路提供(提供正

電流positivecurrent)或倒灌(提供負(fù)電流

negativecurrent)達(dá)40毫安(mA)的電流。這

使得它們利于給LED供電,而不是讀取傳感器。

輸出(OUTPUT)引腳被短路的接地或5V電路上

會受到損壞甚至燒毀。Atmega引腳在為繼電器或

電機(jī)供電時,由于電流不足,將需要一些外接電

路來實(shí)現(xiàn)供電。

true|false(邏輯層定義)

邏輯層定義,true與false(布爾Boolean常量)

在Arduino內(nèi)有兩個常量用來表示真和假:

true和false。

false

在這兩個常量中false更容易被定義。false

被定義為0(零)。

true

true通常被定義為1,這是正確的,但true

具有更廣泛的定義。在布爾含義(Booleansense)

里任何非零整數(shù)為true。所以在布爾含義內(nèi)T,

2和-200都定義為ture。需要注意的是true和

false常量,不同于HIGH,LOW,INPUT和OUTPUT,

需要全部小寫。

integerconstants(整數(shù)常量)

整數(shù)常量是直接在程序中使用的數(shù)字,如

123。默認(rèn)情況下,這些數(shù)字被視為int,但你可

以通過U和L修飾符進(jìn)行更多的限制(見下文)。

通常情況下,整數(shù)常量默認(rèn)為十進(jìn)制,但可以加

上特殊前綴表示為其他進(jìn)制。

進(jìn)制例子格式備注

10(十進(jìn)制)123無

2(二進(jìn)制)B1111011前綴B只適用于8位的值(0至U255)字符0-1有效

8(八進(jìn)制)0173前綴"0”字符0-7有效

16(十六進(jìn)制)0x7B前綴”O(jiān)x”字符0-9,A-F,A-F有效

小數(shù)是十進(jìn)制數(shù)。這是數(shù)學(xué)常識。如果一個

數(shù)沒有特定的前綴,則默認(rèn)為十進(jìn)制。

二進(jìn)制以2為基底,只有數(shù)字0和1是有效

的。

示例

101〃和十進(jìn)制5等價(1*2。+0*21+1*2-0)

二進(jìn)制格式只能是8位的,即只能表示

0-255之間的數(shù)。如果輸入二進(jìn)制數(shù)更方便的話,

你可以用以下的方式:

mylnt=(B11001100*256)+B10101010;//Bll

001100作為高位。

八進(jìn)制是以8為基底,只有0-7是有效的字

符。前綴“0"(數(shù)字0)表示該值為八進(jìn)制。

0101//等同于十進(jìn)制數(shù)

65((22)+(0*81)+1)

警告:八進(jìn)制數(shù)0前綴很可能無意產(chǎn)生很難

發(fā)現(xiàn)的錯誤,因?yàn)槟憧赡懿恍⌒脑诔A壳凹恿藗€

“0”,結(jié)果就悲劇了。

十六進(jìn)制以16為基底,有效的字符為0-9

和A-F。十六進(jìn)制數(shù)用前綴“Ox”(數(shù)字0,字母

愛克斯)表示。請注意,A-F不區(qū)分大小寫,就

是說你也可以用a-fo

示例

0x101//等同于十進(jìn)制

257((1*16^2)+(0*16^1)+1)

U&L格式

默認(rèn)情況下,整型常量被視作int型。要將

整型常量轉(zhuǎn)換為其他類型時,請遵循以下規(guī)則:

'u'or'U'指定一個常量為無符號型。(只能

表示正數(shù)和0)例如:33u

‘1'or'L'指定一個常量為長整型。(表示數(shù)

的范圍更廣)例如:100000L

'ul'or'UL'這個你懂的,就是上面兩種類

型,稱作無符號長整型。例如:32767U1

floatingpointconstants(浮點(diǎn)常量)

和整型常量類似,浮點(diǎn)常量可以使得代碼更

具可讀性。浮點(diǎn)常量在編譯時被轉(zhuǎn)換為其表達(dá)式

所取的值。

例子

n=.005;浮點(diǎn)數(shù)可以用科學(xué)記數(shù)法表示。'E'

和力都可以作為有效的指數(shù)標(biāo)志。

浮點(diǎn)數(shù)被轉(zhuǎn)換為被轉(zhuǎn)換為

溫馨提示

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

評論

0/150

提交評論