2013年2月5日 星期二

小山的 C# 教學-第7課-變數宣告意義與型別

本課簡介

此課在解釋為何變數需要進行宣告
另外進一步地介紹之前提過的 int 型別
並另外介紹 float、double、bool 型別的變數

教學影片

注意:影片有高畫質 720P 的選項,可以看得更清楚喔!



重點提示

1. 宣告變數的意義在於,先告知電腦到底我們要給這個變數多少記憶體空間(從 type 判斷)以及它的名稱是甚麼

2. 在 C# 裡面,每個 int 的變數可以分配到 32 bits(4 bytes) 的記憶體空間。也就是說,對於每個 int 的變數,電腦會存放 32 個 0 或 1 在記憶體裡面

3. int 只能儲存有限大小的數字,而這個範圍是從 2^31 - 1 到 - 2^31,也就是 2,147,483,647 到 - 2,147,483,648 這之間的數字

4. 想要儲存小數可以使用 float 或 double,一般使用可以儲存數字範圍較大的 double

5. C# 會預先將所有數字當成 double 來處理

6. 有一種型別 bool 只能儲存「true」、「false」兩種資料,這種數值通常用來儲存判斷式的結果

補充

32 bits 的整數

本課提到 C# 裡面的 int 是使用 32 bits 的空間。但是在 C/C++ 裡面,int 變數使用的空間則跟 CPU 與 Compiler 有關。有時候會是 32-bit ,有時候是 64-bit。而 C# 並沒有這個問題。因為事實上,C# 內建了三種 int 型別,分別為 Int16、Int32、Int64,代表16、32、64 bits 的整數。當我們打 int 時,程式會自動解析為 Int32 來處理。因此固定都是 32-bit 的整數。

大數 Big Integer

int 能儲存的數字有限,因此當我們需要儲存更大的數字時,可能就不夠用了。從上一段文中可以知道,C# 還有內建的 Int64 這個型別可以使用。但是在密碼學中,進行 RSA 演算法時,因為內含大量的指數(exponential)與模數(mod)預算,使得 64-bit 的數字也不足以儲存計算結果。這個時候,大數(Big Integer)就登場了。

「大數」其實與一般的「整數」無異,不過它使用的記憶體空間會隨著儲存的數字做動態變化。基本上只要你的記憶體夠大,想要儲存多大的數字都不是問題。大數實作方式有很多種,而 Java 跟 C# 都有官方寫好的版本供大家使用。如何實作大數並加以使用也是程式競賽中時常出現的考題呢!

相關資訊連結

變數的內建型別列表

http://msdn.microsoft.com/zh-tw/library/cs7y5x0x%28v=vs.90%29.aspx

大數 Big Integer 相關資訊

http://msdn.microsoft.com/zh-tw/library/system.numerics.biginteger.aspx

6 則留言:

  1. 大開眼界!!!!
    這對不是資工的我非常有幫助!!!
    這些教學真的做得很棒!!!!

    回覆刪除
  2. 非常喜歡您的教學,真的非常淺顯易懂 ! ! 感謝您花費的時間心血 受益匪淺 可以考慮開實況教學了

    回覆刪除
  3. 非常喜歡您的教學,真的非常淺顯易懂,但關於double有問題想詢問

    以30 / 4為例
    用以下程式碼僅會算到整數位,也就是7
    double n = 30 / 4;
    MessageBox.Show("" + n);

    但如果用以下算法即可算出7.5
    decimal n = 30m / 4;
    MessageBox.Show("" + n);

    請問兩者有差異嗎? 還是我double的用法有錯?

    謝謝指教

    回覆刪除
    回覆
    1. 以30 / 4為例
      用以下程式碼僅會算到整數位,也就是7
      double n = 30 / 4;
      MessageBox.Show("" + n);
      為何? 謝謝

      刪除