切換
舊版
前往
大廳
主題

C++程式語言 5─(未補完)資料型別、位元科普

LinYa | 2018-08-15 03:57:58 | 巴幣 5 | 人氣 611

程式語言 前言
有錯都歡迎大家留言來鞭!!
同時也讓我更加理解我誤解的地方。

文章會盡量以白話、口語化的方式將我理解的撰寫,
想要口語化就會廢話很多,
又或是基於簡單理解(不多解釋)
而出現舉例不正確的狀況,
還請鞭小力一點。


這一話要介紹的是 基礎 基礎 雞雞處資料型態、資料型別
#include<iostream>
using namespace std;

int main()
{

    return 0;
}












複習一下 基本架構 (從上至下)
1.從C++#include抓功能使用(<iostream>主要使用cout、cin功能)
2.之後萬年使用"std" (就不用再一行一行輸入std::cout、std::cin)
3-1.int 本篇要教的
3-2.main() 程式碼開始的地方。
4.return 0 翻譯成中文:回傳 0(用來呼應 int main())


好的  來!!

資料型別

先看一下這串中文
資料型別 變數1,變數2(=初值);


好 記得住有鬼,我們略過它

之前一直說 int整數資料 int整數資料

來了解一下 資料型別
所謂的資料型別
就是告訴C++你現在要用"什麼計算方式"儲存某個數據(變數)

因為電腦只有一個,算盤只有一個。
一樣都是計算,但因為"算的東西"不一樣,
所以必須要告訴系統目前要計算什麼東西。
(還是你想要一台電腦專門幫你加法;一台專門幫你剪髮)


科普區 (可略過)

位元
int 就是指 "32位元的範圍"
32位元是什麼?!
(32Bit 比特幣的比特 就是這個Bit)

傻瓜教學:
32位元==2的32次方==2x2x.....x2 (32次)
也就是2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2
==4294967296 (可以自己計算看看)

然後呢??
之前說過 電腦只懂 {0} 跟 {1}
(通過 "{斷電}、{通電}" 實踐 "{假}、{真}")
也就是所謂的二進位

電腦裡面擺了32個能"通電、斷電"的裝置(電晶體),
就能實踐4294967296種排列方法
把"每個排列方法"替代 "某數字"
(還記得 電話的例子嗎)

假想圖:下面是32個電晶體 每個"依序"通電 斷電 狀況
00000000,00000000,00000000,00000000
第1個排列方法 替代 0 (這個數字)
00000000,00000000,00000000,00000001
第2個排列方法 替代 1 (這個數字)
00000000,00000000,00000000,00000010
第6個排列方法 替代 2 (這個數字)
                              ...
1111111,11111111,11111111,11111101
第4,294,967,294個排列方法 替代 4,294,967,293
1111111,11111111,11111111,11111110
第4,294,967,295個排列方法 替代 4,294,967,294
1111111,11111111,11111111,11111111
第4,294,967,296個排列方法 替代 4,294,967,295

32位元總共只有4,294,967,296個排列方法
所以 32位元 替代的最小數是0,
最高"能替代的數字"只能是 4294967295
(除非你要不連續 1 3 4 6 7 9 10 32 這樣亂替代)

而 32位元 如果是代替成 補數(數字有負號 - ) 假想圖:
00000000,00000000,00000000,00000000
第1個排列方法 替代 0 (這個數字)
00000000,00000000,00000000,00000001
第2個排列方法 替代 1 (這個數字)
00000000,00000000,00000000,00000010
第3個排列方法 替代 2 (這個數字)
                              ...
0111111,11111111,11111111,11111111
第2,147,483,648個排列方法 替代 2,147,483,647 (這個數字)
10000000,00000000,00000000,00000000
2,147,483,649個排列方法 替代 -2,147,483,648 (這個數字)
                              ...
1111111,11111111,11111111,11111101
第4,294,967,294個排列方法 替代 -3 (這個數字)
1111111,11111111,11111111,11111110
第4,294,967,295個排列方法 替代 -2 (這個數字)
1111111,11111111,11111111,11111111
第4,294,967,296個排列方法 替代 -1 (這個數字)

以{通電}、{斷電}的動作 來代替 某數;
電話是如此,摩斯密碼 也是如此。
兩個人都會摩斯密碼 就是學會了 摩斯語言

好啦 扯遠了。
位元的定義懂了
應該夠淺白吧??

電腦的發展史中
第一個出現的是 4位元的處理器
最多只有16種排列方法 也就是0~15 (遠望)
(圖片是Intel C4004處理器)


到了8位元時代 整個大放異彩 (256種的排列方法很夠用)
可以看到當初的人是如何絞盡腦汁,用僅有的256種創造出一堆東西。
開始廣泛使用的電腦(8-bit)、超級經典紅白機 (8-bit遊戲)、甚至有使用這種處理器來模擬聲音的(8-bit音樂),直到現在還是有這種方式的新創作。
一樣是用256種排列方法 透過它的排列方式,
處理器來來模擬聲音
以下看 「NiceChord (好和弦) 介紹 超級瑪莉(8-bit音樂)」


[2:11] 處理器 就是我們這邊說的8-bit位元處理器啦
[2:47] "2A03處理器" 是聲音處理器
長得是不是跟 Intel C4004 很像
後面介紹略,詳請看影片

所以呢 32位元、64位元 就是有差別。

能替代的數字越多,就能"一次計算"越多數字。
電腦真的是人很偉大的發明呢~~

(如果舉例錯誤,請留言大力鞭)

回頭來說

整數資料
輸入 int 就是 告訴C++你要使用 32位元 "能替代"的範圍,
剛剛說過 32位元總共能使用"4,294,967,296個排列"。
int "替代的範圍" 就是 -2,147,483,648 ~ 2,147,483,647

有32位元,自然就有其他位元數,
算法如同32位元的算法。
類型名稱
位元

範圍
char 8
位元
-128 ~ 127
short 16
位元
-32,768 ~ 32,767
int
32
位元
-2,147,483,648
~2,147,483,647

long 32
位元
-2,147,483,648
~2,147,483,647
long long 64
位元
–9,223,372,036,854,775,808
~9,223,372,036,854,775,807


  
  












如果我們不需要 補數(負數)
可以加入 unsigned (無符號)
unsigned char
範圍:0~256
unsigned short
範圍:0~65,535
unsigned int
範圍:0~4,294,967,295
unsigned long
範圍:0~4,294,967,295
unsigned long long
範圍:0~18,446,744,073,709,551,615 (千"京"單位)



這是C++第一種計算方法,
因為位元的基礎運算關係都是計算整數
所以稱為整數資料

先到這邊...
太龐大了這資訊量 Orz
原本想說要不要分篇介紹資料型別,
但覺得 資料面的應該堆疊在同一篇裡面會比較好。

要簡單明瞭果然很難啊~~~

以下待修整。

浮點數
再來是系統第二種計算方式,
一樣是用 32位元 計算,
但透過"特定資料型別"告知系統"切換計算方式"

如圖








資料型別區分為
1-布林型別(Bool)
最基礎的 只有 0 和 1 兩個數據
在某些程式語言(例如java)
則是以true;flase(真;假)來代表1和0

2-數值型別
3-字元型別(char)
4-字串型別(string)
*標頭檔 要加入 #include <string>
字串變數 string ___;


變數
1.第一個字母必須要 「英文(有分大小寫)」、或是「_(底線)」;不能輸入『空白』或是『特別符號(~@#&^等等)』。
*雖然輸入中文也行,但不是所有電腦都能輸入中文。還是不建議
2.C++專有的"保留字"不能使用
*例如main 例如int 例如cout
(C++已經定義這些"保留字"了,就不能再當變數。但可以加底線的方式 _int 就可以)

正常編譯 應該都使用"有意義的英文"
不但好理解(對我來說並不),而且別人也能理解。

例如 int salary,weight;
我們就知道是salary用來存放 薪水 的變數;weight 則是體重。

(如果跟我一樣英文爛 也可以單調的使用 int A,B,C;)

引用:

創作回應

更多創作