程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++編程中的數據類型和常量進修教程

C++編程中的數據類型和常量進修教程

編輯:關於C++

C++編程中的數據類型和常量進修教程。本站提示廣大學習愛好者:(C++編程中的數據類型和常量進修教程)文章只能為提供參考,不一定能成為您想要的結果。以下是C++編程中的數據類型和常量進修教程正文


C++數據類型
盤算機處置的對象是數據,而數據是以某種特定的情勢存在的(例如整數、浮點數、字符等情勢)。分歧的數據之間常常還存在某些接洽(例如由若干個整數構成一個整數數組)。數據構造指的是數據的組織情勢。例如,數組就是一種數據構造。分歧的盤算機說話所許可應用的數據構造是分歧的。處置統一類成績,假如數據構造分歧,算法也會分歧。例如,對10個整數排序和對包括10個元素的整型數組排序的算法是分歧的。

C++的數據包含常量與變量,常量與變量都具有類型。由以上這些數據類型還可以組成更龐雜的數據構造。例如應用指針和構造體類型可以組成表、樹、棧等龐雜的數據構造。

C++並沒有同一劃定各類數據的精度、數值規模和在內存中所占的字節數,各C++編譯體系依據本身的情形作出支配。表2.1列出了Visual C++數值型和字符型數據的情形。

幾點解釋:
1) 整型數據分為長整型(long int)、普通整型(int)和短整型(short int)。在int後面加long和short分離表現長整型和短整型。

2) 整型數據的存儲方法為按二進制數情勢存儲,例如十進制整數85的二進制情勢為1010101,則在內存中的存儲情勢以下圖所示。

3) 在整型符號int和字符型符號char的後面,可以加潤飾符signed(表現“有符號”)或unsigned(表現“無符號”)。假如指定為signed,則數值以補碼情勢寄存,存儲單位中的最高位(bit)用來表現數值的符號。假如指定為unsigned,則數值沒有符號,全體二進制位都用來表現數值自己。例如短整型數據占兩個字節 ,

有符號時,能存儲的最年夜值為215-1,即32767,最小值為-32768。無符號時,能存儲的最年夜值為216-1,即65535,最小值為0。有些數據是沒有負值的,可使用unsigned,它存儲負數的規模比用signed時要年夜一倍。

4) 浮點型(又稱實型)數據分為單精度(float)、雙精度(double)和長雙精度(long double)3種,在Visual C++ 6.0中,對float供給6位有用數字,對double供給15位有用數字,而且float和double的數值規模分歧。對float分派4個字節,對double和long double分派8個字節。

5) 表中類型標識符一欄中,方括號[ ]包括的部門可以省寫,如short和short int等效,unsigned int和unsigned等效。

常量的值是不克不及轉變的,普通從其字面情勢便可辨別能否為常量。常量包含兩年夜類,即數值型常量(即常數)和字符型常量。如12, 0, -3為整型常量,4.6, -1.23為實型常量,包括在兩個單撇號之間的字符為字符常量,如′a′, ′x′。這類從字面情勢便可辨認的常量稱為“字面常量”或“直接常量”。


C++常量(C++數值常量、字符串常量、符號常量)
數值常量

數值常量就是平日所說的常數。在C++中,數值常量是辨別類型的,從字面情勢便可辨認其類型。

整型常量(整數)的類型
在上一節中已曉得:整型數據可分為int, short int,long int和unsigned int, unsigned short, unsigned long等種別。整型常量也分為以上種別。為何將數值常量辨別為分歧的種別呢?由於在停止賦值或函數的參數真假聯合時請求數據類型婚配。

那末,一個整型常量如何從字面上辨別為以上的種別呢?
一個整數,假如其值在-32768~+32767規模內,以為它是short int型,它可以賦值給short int型?int型和long int型變量。
一個整數,假如其值跨越了上述規模,而在-2147483648~+2147483647規模內,則以為它是long int型,可以將它賦值給一個int或long int型變量。
假如某一盤算機體系的C++版本(例如Visual C++)肯定int與long int型數據在內存中占領的長度雷同,則它們可以或許表現的數值的規模雷同。是以,一個int型的常量也同時是一個long int型常量,可以賦給int型或long int型變量。
常量無unsigned型。但一個非負值的整數可以賦值給unsigned整型變量,只需它的規模不跨越變量的取值規模便可。

一個整型常量可以用3種分歧的方法表現:
十進制整數。如1357, -432, 0等。在一個整型常量前面加一個字母l或L,則以為是long int型常量。例如123L, 421L, 0L等,這常常用於函數挪用中。假如函數的形參為long int,則請求實參也為long int型,此時用123作實參不可,而要用123L作實參。
八進制整數。在常數的開首加一個數字0,就表現這是以八進制數情勢表現的常數。如020表現這是八進制數20,即(20)8,它相當於十進制數16。
十六進制整數。在常數的開首加一個數字0和一個英文字母X(或x),就表現這是以十六進制數情勢表現的常數。如0X20表現這是十六進制數20,即(20)16,它相當於十進制數32。
浮點數的表現辦法

一個浮點數可以用兩種分歧的方法表現:
1) 十進制小數情勢。如21.456, -7.98等。它普通由整數部門和小數部門構成,可以省略個中之一(如78.或.06, .0),但不克不及兩者皆省略。C++編譯體系把用這類情勢表現的浮點數一概按雙精度常量處置,在內存中占8個字節。假如在實數的數字以後加字母F或f,表現此數為單精度浮點數,如1234F, -43f,占4個字節。假如加字母L或l,表現此數為長雙精度數(long double),在GCC中占12個字節,在Visual C++ 6.0中占8個字節。

2) 指數情勢(即浮點情勢)。一個浮點數可以寫成指數情勢,如3.14159可以表現為0.314159×101, 3.14159×100, 31.4159×10-1, 314.159×10-2等情勢。在法式中應表現為:0.314159e1, 3.14159e0, 31.4159e-1, 314.159e-2,用字母e表現厥後的數是以10為底的冪,如e12表現1012。其普通情勢為:
    數符  數字部門  指數部門

下面各數據中的0.314159, 3.14159, 31.4159, 314.159 等就是個中的數字部門。可以看到:因為指數部門的存在,使得統一個浮點數可以用分歧的指數情勢來表現,數字部門中小數點的地位是浮動的。例如:

 a=0.314159e1;
 a=3.14159e0;
 a=31.4159e-1;
 a=314.159e-2;

以上4個賦值語句中,用了分歧情勢的浮點數,但其感化是雷同的。

在法式中豈論把浮點數寫成小數情勢照樣指數情勢,在內存中都是以指數情勢(即浮點情勢)存儲的。例如豈論在法式中寫成314.159或314.159e0, 31.4159e1, 3.14159e2, 0.314159e3等情勢,在內存中都是以標准化的指數情勢寄存,

數字部門必需小於1,同時,小數點前面第一個數字必需是一個非0數字,例如不克不及是0.0314159。是以314.159和314.159e0, 31.4159e1, 3.14159e2, 0.314159e3在內存中表現成0.314159×103。存儲單位分為兩部門,一部門用來寄存數字部門,一部門用來寄存指數部門。為便於懂得,在圖2.3中是用十進制表現的,現實上在存儲單位中是用二進制數來表現小數部門,用2的冪次來表現指數部門的。

關於以指數情勢表現的數值常量,也都作為雙精度常量處置。
字符常量

1) 通俗的字符常量
用單撇號括起來的一個字符就是字符型常量。如'a', '#', '%', 'D'都是正當的字符常量,在內存中占一個字節。留意:
字符常量只能包含一個字符,如'AB' 是不正當的。
字符常量辨別年夜小寫字母,如'A'和'a'是兩個分歧的字符常量。
撇號(')是定界符,而不屬於字符常量的一部門。如cout<<'a';輸入的是一個字母"a",而不是3個字符"'a' "。

2) 本義字符常量
除以上情勢的字符常量外,C++還許可用一種特別情勢的字符常量,就是以 "\"開首的字符序列。例如,'\n'代表一個"換行"符。"cout<<'\n'; " 將輸入一個換行,其感化與"cout<<endl; " 雷同。這類"掌握字符",在屏幕上是不克不及顯示的。在法式中也沒法用一個普通情勢的字符表現,只能采取特別情勢來表現。

3) 字符數據在內存中的存儲情勢及其應用辦法
將一個字符常量寄存到內存單位時,現實上其實不是把該字符自己放到內存單位中去,而是將該字符響應的ASCII代碼放到存儲單位中。假如字符變量c1的值為'a',c2的值為'b',則在變量中寄存的是'a'的ASCII碼97,'b' 的ASCII碼98,如圖2.4(a)所示,現實上在內存中是以二進制情勢寄存的,

既然字符數據是以ASCII碼存儲的,它的存儲情勢就與整數的存儲情勢相似。如許,在C++中字符型數據和整型數據之間便可以通用。一個字符數據可以賦給一個整型變量,反之,一個整型數據也能夠賦給一個字符變量。也能夠對字符數據停止算術運算,此時相當於對它們的ASCII碼停止算術運算。

【例】將字符賦給整型變量。

#include <iostream>
using namespace std;
int main( )
{
 int i, j; //i和j是整型變量
 i='A'; //將一個字符常量賦給整型變量i
 j='B'; //將一個字符常量賦給整型變量j
 cout<<i<<' '<<j<<'\n'; //輸入整型變量i和j的值,'\n' 是換行符
 return 0;
}

履行時輸入

 65 66

i和j被指定為整型變量。但在第5和第6行中,將字符'A'和'B'分離賦給i和j,它的感化相當於以下兩個賦值語句:

 i=65;j=66;

由於'A'和'B'的ASCII碼為65和66。在法式的第5和第6行是把65和66直接寄存到i和j的內存單位中。是以輸入65和66。

可以看到:在必定前提下,字符型數據和整型數據是可以通用的。然則應留意字符數據只占一個字節,它只能寄存0~255規模內的整數。

【例】字符數據與整數停止算術運算。上面法式的感化是將小寫字母轉換為年夜寫字母。

#include <iostream>
using namespace std;
int main( )
{
 char c1,c2;
 c1='a';
 c2='b';
 c1=c1-32;
 c2=c2-32;
 cout<<c1<<' '<<c2<<endl;
 return 0;
}

運轉成果為

 A B

'a'的ASCII碼為97,而'A'的ASCII碼為65,'b'為98,'B'為66。從ASCII代碼表中可以看到每個小寫字母比它響應的年夜寫字母的ASCII代碼年夜32。C++符數據與數值直接停止算術運算,'a'-32獲得整數65,'b'-32獲得整數66。將65和66寄存在c1,c2中,因為c1,c2是字符變量,是以用cout輸入c1,c2時,獲得字符A和B(A的ASCII碼為65,B的ASCII碼為66)。
字符串常量

用雙撇號括起來的部門就是字符串常量,如"abc","Hello!","a+b","Li ping"都是字符串常量。字符串常量"abc"在內存中占4個字節(而不是3個字節),見圖。

編譯體系會在字符串最初主動加一個'\0'作為字符串停止標記。但'\0'其實不是字符串的一部門,它只作為字符串的停止標記。如

  cout<<"abc"<<endl;

輸入3個字符abc,而不包含'\0'。

留意: "a"和'a'代表分歧的寄義,"a"是字符串常量,'a' 是字符常量。前者占兩個字節,後者占1個字節。請剖析上面的法式片斷:

 char c; //界說一個字符變量
 c='a'; //准確
 c="a"; //毛病,c只能包容一個字符

請思慮:字符串常量"abc\n"包括幾個字符?不是5個而是4個字符,個中"\n"是一個本義字符。但它在內存中占5個字節(包含一個"\0"字符) 。編譯體系碰到"\"時就會把它認作本義字符的標記,把它和厥後的字符一路作為一個本義字符。

假如"\"前面的字符不克不及與"\"構成一個正當的本義字符(如"\c"),則在編譯時顯示失足信息。假如願望將"\"字符也作為字符串中的一個字符,則應寫為"abc\\n",此時字符包含5個字符,即a,b,c,\,n。假如有以下輸入語句:

 cout<<"abc\\\n"<<endl;

則會輸入:

 abc\ (然後換行)

同理履行

 cout<<"I say \"Thank you!\"\n";

的輸入是:

 I say "Thank you!"

假如在一個字符串中最初一個字符為"\",則表現它是續行符,下一行的字符是該字符串的一部門,且在兩行字符串間無空格。如

 cout<<"We must study C\ //本行最初的"\"前面的空格和換行均不起感化
 ++ hard!"; //本行的字符緊連在上一行最初的"\"後面字符以後

則輸入:

 We must study C++ hard!

符號常量

為了編程和浏覽的便利,在C++法式設計中,經常使用一個符號名代表一個常量,稱為符號常量,即以標識符情勢湧現的常量。

【例】符號常量的應用。

#include <iostream>
using namespace std;
#define PRICE 30 //留意這不是語句,末尾不要加分號
int main ( )
{
 int num,total;
 num=10;
 total=num * PRICE;
 cout<<"total="<<total<<endl;
 return 0;
}

法式頂用預處置敕令#define指定PRICE在本法式單元中代表常量30,爾後凡在本法式單元中湧現的PRICE都代表30,可以和常量一樣停止運算,法式運轉成果為

 total=300

請留意符號常量固然著名字,但它不是變量。它的值在其感化域(在本例中為主函數)內是不克不及轉變的,也不克不及被賦值。如用賦值語句"PRICE=40;"給PRICE賦值是毛病的。 應用符號常量的利益是:寄義清晰,在須要轉變一個常量時能做到"一改全改"。 如:

 #define PRICE 35

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved