程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 小豬豬逆襲成博士之C++基礎篇(一)數據精度、強制類型轉換、變量命名規則,小豬豬命名規則

小豬豬逆襲成博士之C++基礎篇(一)數據精度、強制類型轉換、變量命名規則,小豬豬命名規則

編輯:C++入門知識

小豬豬逆襲成博士之C++基礎篇(一)數據精度、強制類型轉換、變量命名規則,小豬豬命名規則


小豬豬逆襲成博士之C++基礎篇(一)

關鍵詞: 數據精度、強制類型轉換、變量命名規則

綜述:

1、大多數編程語言通過兩種方式來進一步補充其特征:一是賦予程序員自定義數據類型的權利(C++中的類);二是講一些有用的功能封裝成庫函數提供給程序員使用(C++提供的函數和標准庫)。

2、C++是一種靜態數據類型語言,他的類型檢查發生在編譯時,而另外一些語言例如Python是在運行時檢查數據類型的。

 

基礎篇主要分為六個部分,通過這六個部分我們將了解C++的基本知識。通過這些基本語法知識就足夠在OJ平台上AC一個小程序啦!PS:本文只可作為你茶余飯後小點心,如果你一點點基礎知識都沒有還是先好好聽老師上課或者看看書吧~

 

本章主要簡述的是C++的內置類型,通過這些內置類型可以初步了解C++是如何支持更加復雜的數據類型的。

 

一、基本的內置類型

基本內置類型包括我們熟悉的bool,char,short, int, long, float,double,還有其他的什麼寬字節啊,長整形啊,64位長整形什麼的。當然了,你有一點點編程語言的知識都會覺得簡直SO EASY啊,還有什麼好說的呢。其實還是有很多需要闡述的事情:

 

第一,各種類型的位數。

也許你會背的很熟,char是8位,short16位,float是32位等等,但是需要值得注意的是int型,在不同的機器上面的位數是浮動的,可能是16位也有可能是32位。

至於浮點數的精度問題,簡單的就是如何選用float和double的這個問題來說float是有7個有效數字,double是有16位有效數字。在你做少量的運算的時候可以不太考慮這些精度問題,但是當你做大量數據運算,例如我們做大量的圖片像素計算並且在算法用有很多迭代求導什麼的,精度的區別的積累會出現很大差距。而且不用編譯器是不同的。通常你做算法出現了和理論不同的結果,可以查一查是不是精度的問題。

在此,我就建議最好還是盡量選擇用double類型的。原因有2,第一,double 精度高,第二,double不一定慢。

 

第二,強制類型轉換

在很多運算中會做強制類型轉換,通常會碰到這樣一些問題:

1、整數和浮點數之間的轉換:

整數轉成浮點數就很容易理解了,就是整數後面加上0,比如1,變成浮點數就會是1.0這樣,但是你要是長整形就不是這麼回事了。學過《組成原理》的應該就知道浮點數的存儲方法,是數字加上小數點的位置。因此浮點數都是有一個范圍的,當你的整數太大了還是會溢出的,很多競賽題都是這麼坑人的。自己在編程的時候需要注意。

浮點數轉換成整數,浮點數轉換成整數的時候不要想象成近似,它是實實在在的剪掉了,我們寫小段代碼就可以知道了:

     double a=1.234;

 

int b=a;

 

cout<<"a= "<<a<<endl;

cout<<"b= "<<b<<endl;

 

a=1.789;

b=a;

 

cout<<"a= "<<a<<endl;

cout<<"b= "<<b<<endl;

結果是這樣的

 

2、有符號和無符號類型轉換。

還是從《組成原理》裡面數字存儲的角度來講,有符號類型和無符號類型存儲方式是兩回事,有符號的數存儲的時候是專門有個符號位的,無符號就是沒有了。所以並不是 char -3變成unsigned char 以後會成為3,實際結果應該是該值對256取模的余數。因此,寫程序的時候有符號就是有符號,無符號就是無符號千萬不要混用。另外,無符號的數字相減的時候也要注意,千萬不能剪成負數了,這樣值就不對啦。很多編程的時候總是有問題可能是這個引起的。切記,切記!

 

總之選擇數據類型是一件非常重要的事情,通常需要考慮到精度、存儲大小還有符號問題。特別是當你在做對內存有嚴格控制的程序的時候。

 

二、變量的聲明和命名規則

一般的,老師都會告訴你全局變量,局部變量的作用范圍什麼的。在C++中一個變量只能定義一次,但是會有作用域的區別。簡單的來說我們看一個簡單的程序。

 

 

 

基本上就是這樣了,最裡面的作用域只在裡面用。括號完了以後就恢復要原先的。可以看到我們再第15行定義了一個i=100,18行的for語句運行完i應該是9,但是括號結束了,那個等於9的i就沒有用了,所以又成了100。

 

三、指針和引用

在學習C語言的時候,剛剛學到指針的時候一般都是弄不懂的,因為這個東西太虛擬了。最先開始別人問我指針到底是個什麼玩意的時候,我只能按照書上寫的那一通說一遍,你要是還是不懂,我再甩你一句話。靠經驗,用常了就知道了。

那麼還是根據《組成原理》或者《操作系統》這種講述了計算機存儲原理的書籍後,大概可以發現,指針也可以看成是一個變量,和int差不多。但是int這種放的是數據,指針放的是地址。計算機在做指針的時候,先讀指針裡面的數據就是地址了,然後再根據這個地址找到在這個地址的數據。所以了,常見的用法,聲明指針int *p,*q,前面帶了星號,當我們做p=q的時候,實際上是把q指向的地址給了p,我們做*p=*q的時候是把q地址指向的數據值給了p地址指向的數據值。簡單的一句話就是,指針就是個地址並不是值。

另外建議在聲明指針的時候請初始化,例如int *p=0;要不會出現很多不好的結果,詳見老師給你吹噓的那些。

引用是在C++裡面才提到的概念,簡單的說就是取小名,張三是你,小三也是你。所以在函數中傳參的時候int fun(&a);是會修改傳進來那個參數的值,int fun(a)就不會。這種東西你試幾遍就可以了解了。

最後呢,&符號也是取地址的意思,int a=0;&a就是a所在的地址的位置,結合指針的概念就可以理解,&其實是*的一種逆向操作。int *p; int a=0; p=&a;那麼可以發現*p的值就是a的值。

 

 

總結:

    總結一下,本章主要講述了三個問題,第一,不用變量類型之間的精度問題;第二,聲明變量的作用域問題(這個跟C語言有一點不同);第三,指針和引用的意義。以上純屬個人理解,不對的地方請指正。

 



 

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