C 入門教程(十五) 數字與進製

2021-08-18 00:13:30 字數 3263 閱讀 8397

小古銀的官方**(完整教程):

補充知識(了解即可)

鞏固練習

當你完成上一部分教程的全部練習後,相信你應該可以靈活地使用c++去解決大部分問題,尤其是數學問題。

本部分教程將講解c++中必須知道的計算機基礎知識,知道這些知識可以避免不少的錯誤,還可以對程式**進一步優化。由於這部分教程只講解c++需要知道的計算機基礎知識,所以並不會太多和太複雜。

計算機處理資料是由電路控制的,電路只有兩種狀態:,因此計算機上的所有資料都是二進位制的資料,然後用一定的規則將這些資料表示成十進位制數字、文字、和其他各種各樣的形式,所以接下來的內容都是圍繞二進位制而講解的。

學習這部分教程才能更好地理解後續的教程,只要用心地去學就不會有問題。這部分知識了解即可不必深入,如果有興趣,深入也無妨。

在講解二進位制相關知識前,先講解c++中數值的各種表示方式和各種操作。

寫**的時候,難免會遇到一些比較大的數。用乙個很小的數做例子,例如先賺它乙個億(●』◡』●)。那麼我們寫**的時候,一億在**中的寫法是100000000

為了方便閱讀數字,可以用單引號'分隔一下,這個單引號叫做數字分位符。一億就可以寫成這樣子:1'0000'0000,一看就知道一億。

先看以下**:

#include int main(void)

輸出結果:

一億:100000000

一百萬:1000000

這種寫法就不好了:100000000

輸出還是正常的數值輸出,不會在輸出的數值裡顯示數字分位符,因為數字分位符是為了方便閱讀**而出現的。但是第三種寫法並不能方便閱讀**,所以不是乙個好的寫法。

對於乙個十進位制的15,可以表示成二進位制的1111,也可以表示成八進位制的17,也可以表示成十六進製制的f。儘管15111117f看上去不一樣,但是它們都是同乙個整數,只是表示方法不一樣。

先看以下例子:

#include int main(void)

輸出結果:

15

1515

15

可以看到它們都是輸出15,因為它們都是同乙個數字的不同表示方法,而std::cout預設以十進位制顯示,所以都顯示15

在**中,預設以十進位制來表示數字,如果要用其他進製表示乙個數字,需要一些特殊的說明:

至於為什麼不只是用十進位制,還要新增這麼多表示方式,其實很簡單,因為有一些數**算,有時候,不用十進位制而用其他進製運算更加容易理解,方便程式設計師做數**算。初學者只要理解並背下來,以後將會用得上。

有時候,當用十六進製制運算完後,極有可能想看看十六進製制的結果,然而,std::cout預設顯示的是十進位制。這時候,我們就要告訴std::cout我要用十六進製制顯示。

先看下面例子:

#include int main(void)

輸出結果:

十六進製制 11 + 22 的結果是:

預設:51

八進位制:63

十六進製制:33

十進位制:51

當我們需要輸出八進位制時,需要先輸出std::oct;當我們需要輸出十六進製制時,需要先輸出std::hex。如果想再次輸出十進位制,就必須要先輸出std::dec;否則,將會繼續以前一次使用的進製(上面**就是十六進製制)來輸出。其中std::octstd::decstd::hexiostream庫中。

仔細的你應該發現了,我沒有寫二進位制輸出。二進位制的輸出方法跟上面的有些不同,因為std::cout沒有直接的二進位制輸出。如果想輸出二進位制數字,則可以使用std::bitset,它在bitset標準庫中。使用std::bitset《二進位制的位數》(數字)就可以輸出二進位制了,具體用法如下:

#include // std::cout std::endl

#include // std::bitset

int main(void)

輸出結果:

十六進製制 11 + 22 的結果是:

二進位制:00110011

預設:51

由於這次輸出不改變std::cout的行為,所以預設還是輸出十進位制:

std::cout << "預設:" << 0x11 + 0x22 << std::endl;
**中,std::bitset<8>(0x11 + 0x22)指定了8位二進位制(不足8位則在左邊用0補夠8位):

浮點型即小數。

同樣,輸出顯示十六進製制浮點型需要先輸出std::hexfloat,它在iostream標準庫中:

#include int main(void)

輸出結果:

30

0x1.e00000p+4

數字分位符從c++11開始加入。

二進位制表示法(即0b)從c++11開始加入。

十六進製制的浮點型表示方法和十六進製制的浮點型科學記數法從c++17開始加入。

std::hexfloat從c++17開始加入。

輸入三個整數abc,然後分別按順序以八進位制,十進位制,十六進製制的表示方法,輸出這三個整數的和。

c 入門教程 十五

好久沒敲黑板了 前方高能預警 今天的內容可能有些繞,但是,蠻有用的。至少,好玩。前面我們說過,宣告乙個變數,相當於在記憶體中要了一塊空間。不同型別的變數要的空間的大小是不一樣的。既然有了空間,那麼,它就有個開始的位置 比如學校就有門牌號 我們用符號 來獲取乙個變數的位址。用法如下 要獲取首位址的變數...

Golang入門教程(十五)指標

指標是乙個變數,用於儲存另乙個變數的記憶體位址。在上面的例子中,變數b的值是156,儲存在記憶體位址0x1040a124。變數a包含b的位址。可以說現在a指向b。指向型別t的指標用 t表示 讓我們寫一些 package main import fmt func main 運算子用於獲取變數的位址。在...

Golang入門教程(十五)指標

指標是乙個變數,用於儲存另乙個變數的記憶體位址。在上面的例子中,變數b的值是156,儲存在記憶體位址0x1040a124。變數a包含b的位址。可以說現在a指向b。指向型別t的指標用 t表示 讓我們寫一些 package main import fmt func main 運算子用於獲取變數的位址。在...