C++程序設計(一):數據的存儲,形式和運算
首先要明白,在今天的計算機中,信息是以0和1的二進位模式編碼的,這些0和1稱為位(binary digits)。需要提醒的是,這些位不一定表示數值,有時候表示字元、標點(ASCII碼形式),有時候也可以表示圖像和聲音。說白了0和1就是一些符號,具體意義取決於正在處理的應用。
各個語言要求的定義,聲明,賦值語句各不相同,這裡只介紹C++,某種程度上和C語言大部分是一樣的。
當計算機中的這些位表示數值或符號時,需要對具體的數據類型進行定義
下圖為C++中的幾種基本數據類型:
計算機中,一個位元組為8位二進位補碼所表示的數值。
在C++中定義數據的格式為:數據類型+空格+字元+分號(;)
其中指針類型,數組類型和結構體是後面的內容。
例如:
其中布爾型數值,其值為真(常用1,實際上非零都是真)和假(0),常用於標記。
提到布爾型數值不得不提到布爾運算,門和觸發器。
門是一種設備,給出一種布爾運算輸入值時,可以得出該布爾運算的輸出值,經常是微電子電路實現的。觸發器(flip-flop)是一個可以產生0或1輸出值的電路,它的值會一直不變,除非其他電路的臨時脈衝使其改變成另一個值。
布爾運算有四種基本類型,與(and),或(or),非(not)和異或(xor),高中數學都有講過,這裡就不強調了。
計算機包含了大量的電路來存儲數據,如觸發器。每一個電路能夠存儲單獨的一個位,這就是計算機的主存儲器(main memory)。計算機的main memory是以存儲單元為單位組織的,一個存儲單元的容量是8位,稱為一個位元組(byte)。為了區分計算機main memory中的各個單元,每一個單元都有一個獨一無二的地址(address),精確的說是「排成一行按順序編號」的。因此計算機main memory中所有的二進位本質上被排成了一行,即用兩個連續的存儲單元就可以存儲16位的二進位。
實際應用中,計算機存放二進位的電路和其他電路是相連的,可以進行讀寫操作。
因為計算機的main memory的存儲單元是獨立可編址的,所以計算機的main memory通常被稱為RAM(隨機存取存儲器)。
但是計算機的main memory較為不穩定而且容量小,所以就有了海量存儲器(mass storage)。比如CD,DVD(光學系統),SD卡(快閃記憶體),磁碟(磁學系統)。
寫完了數據的存儲,下面寫數據的表示。
數據表示為常量和變數。C++中,數值常量只能由十進位,八進位(前面加一個0)和十六進位(前面加OX)表示。字元常量由字元加單引號構成,存儲為字元的二進位ASCII碼。符號常量在主函數之前進行定義,通常是為了方便表示。
C++中常用的運算符和數學中的差不多,主要有
(1) 算數運算符:+,-,*,/,%(整數求余),++(自加),--(自減)
(2) 關係運算符:>,<,==(等於),>=,<=,!=(不等於)
(3) 邏輯運算符:&&(邏輯與),||(邏輯或),!(邏輯非)
(4) 賦值運算符:=(和數學中不同,這裡的a=b理解為「將變數b 的值賦給a)
(5) 條件運算符:?:(我在另一個回答中寫過)https://www.zhihu.com/question/32163076/answer/284966647
(6) 指針運算符:*
(7) 強制類型轉換運算符:(類型名)(表達式)
例如:
(8) 複合賦值運算符:+=,-=,*=,/=,%=……
如a+=b 等價於 a=a+b
正如數學中有「先加減,後乘除「一樣,C++中的運算符也有優先順序的不同,還有結合方向不同。例如a=b是自右向左結合,而a+b是自左向右結合。
這就是我專欄的第一篇文章。當時學的時候還覺得蠻高深的,其實後面看很基礎。不過這一章的內容很重要,是C++編程的基石。對數據類型不了解會出現不兼容的數據類型進行運算、數值溢出等問題。
就醬,blink~
推薦閱讀:
※張泉靈代言的編程貓三個月內兩次融資 少兒編程教育吸金才剛剛開始
※談對程序的理解
※面向新手的雜談:Flyweight
※從零開始手敲次世代遊戲引擎(DX12特別篇)
※什麼?Python3.X不能輸出中文?原來是編輯器geany的鍋?!