編程知識(shí)點(diǎn)(1)關(guān)鍵詞之存儲(chǔ)類型
(應(yīng)一些初學(xué)者的要求,雖然本人也絕對(duì)稱不上專業(yè),但是想讓一個(gè)人快速地走出初學(xué)的迷茫,需要這種精煉的集合)
首先,闡明一下我的觀點(diǎn):
不論是什么編程語(yǔ)言,其實(shí)有很多的共通之處,基本上你學(xué)過一門編程語(yǔ)言,其他的語(yǔ)言也能很快學(xué)會(huì).(本人學(xué)C++,但是會(huì)在必要的時(shí)候盡量避開語(yǔ)言特色只講想法).
在這么廣泛且有深度的領(lǐng)域中,有些功能的確沒辦法先讓人理解內(nèi)部構(gòu)造再去使用,比如C++語(yǔ)言中的scanf,printf涉及到指針的傳遞事項(xiàng)和變參,cin,cout涉及到模板和重載運(yùn)算符等等.但是我還是選擇先從存儲(chǔ)類型開始講,上述的復(fù)雜的東西以后也會(huì)講到(但是有C++語(yǔ)言特色要開Extra篇).
首先應(yīng)當(dāng)讓大家知道的是計(jì)算機(jī)如果采用十進(jìn)制在資源上(目前)是極為浪費(fèi),且性能不優(yōu)的,而且二進(jìn)制與十進(jìn)制的轉(zhuǎn)換是極為方便的,有興趣可以自行百度"為什么計(jì)算機(jī)采用二進(jìn)制",不浪費(fèi)篇幅.
而正如人要寫字,就要有紙和筆,計(jì)算機(jī)要記錄信息,就要給計(jì)算機(jī)"紙"與"筆","紙"自然是有限的,而"筆"也是有規(guī)格的.內(nèi)存就是計(jì)算機(jī)的"紙",而對(duì)內(nèi)存讀寫的部件就是"筆".
(這么說來計(jì)算機(jī)的"筆"還可以讀,哈哈)
但是,人腦所適應(yīng)的是十進(jìn)制,二進(jìn)制對(duì)于我們來講實(shí)在不易理解,而且計(jì)算機(jī)還要記錄非阿拉伯?dāng)?shù)字的信息,比如我這篇文章,于是就有了ASCII編碼,并有了對(duì)應(yīng)的存儲(chǔ)類型char(character),對(duì)于小一點(diǎn)的數(shù)有short int,大一點(diǎn)的數(shù)有int,再大一點(diǎn)有l(wèi)ong long int,這些歸到整數(shù)(integer)里面,而往往有時(shí)候我們要記錄小數(shù),于是在integer里面拿幾位來記錄小數(shù)點(diǎn)的(十進(jìn)制)位置,就有了float(floating number)和double(Double-precision floating-point)
(想一想,為什么不是直接使用二進(jìn)制記錄小數(shù),即記錄二進(jìn)制下的小數(shù)點(diǎn)位置?提示:將0.31試著轉(zhuǎn)化成二進(jìn)制小數(shù),你會(huì)發(fā)現(xiàn)什么?)
然后把這些類型的屬性與可能的bug講一下,本篇就可以結(jié)束了
char:占1字節(jié),記錄[-128, 127](提示一下沒看懂的小伙伴,這是閉區(qū)間,即包含兩端點(diǎn)的區(qū)間)的整數(shù),ASCII碼表中一般期望背一下字符0的ASCII碼,字符A的ASCII碼,字符a的ASCII碼以及空格和換行的ASCII碼,下表中先了解[0, 127]碼值對(duì)應(yīng)的字符
([128, 255]的部分我想你在學(xué)了unsigned以后會(huì)明白的,或者我提示一下,你把這個(gè)碼值轉(zhuǎn)八位二進(jìn)制看看有什么發(fā)現(xiàn)).

short int:占2字節(jié),記錄[-32768, 32767]的整數(shù).
int:占4字節(jié),記錄[-2147483648, 2147483647]的整數(shù).
long long int:占8字節(jié),記錄[-9,223,372,036,854,775,808, 9,223,372,036,854,775,807]的整數(shù).
(想一想,為什么下限的絕對(duì)值比上限的絕對(duì)值多1?提示:從二進(jìn)制符號(hào)位來思考"正負(fù)數(shù)"的個(gè)數(shù)是否相同)
(要講浮點(diǎn)數(shù),引入一下計(jì)算機(jī)上的科學(xué)記數(shù)法,比如6.02e23表示6.02乘以10的23次冪,指數(shù)為負(fù)數(shù)我不用說了吧)
float:占4字節(jié),記錄[3.4e-38, 3.4e38]的實(shí)數(shù),有效位數(shù)為6~7位.(因?yàn)橛幸徊糠治荒贸鰜碛涗浶?shù)點(diǎn)了,精確度比不上整數(shù)的),但是前期入門時(shí)用用足夠了
double:占8字節(jié),記錄[1.7e-308, 1.7e308]的實(shí)數(shù),有效數(shù)位為15~16位(據(jù)說double類型的處理在現(xiàn)代的優(yōu)化下比f(wàn)loat快...)
那么問題就來了:我有一個(gè)int類型(32位),如果我將一個(gè)占用32位以上的數(shù)據(jù)賦值給這個(gè)int會(huì)怎么樣呢?答案是32位以上的內(nèi)容丟棄,32位及以下的內(nèi)容照搬,而符號(hào)位就有可能被賦到1的值,也就是有些時(shí)候數(shù)據(jù)溢出會(huì)出現(xiàn)負(fù)數(shù),有的時(shí)候會(huì)有正數(shù).如果上下限不夠,我們會(huì)采用高精度的方式來擴(kuò)大上下限,所以大部分情況下出現(xiàn)數(shù)據(jù)溢出的情況是程序員的不認(rèn)真導(dǎo)致的bug.
相關(guān)文章
git版本庫(kù)介紹及本地創(chuàng)建的三種場(chǎng)景方式
這篇文章主要為大家介紹了git版本庫(kù)以及本地創(chuàng)建的三種場(chǎng)景方式圖文教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
SpringBoot + Vue + Electron 開發(fā) QQ 版聊天工具的詳細(xì)教程
這篇文章主要介紹了SpringBoot + Vue + Electron 開發(fā) QQ 版聊天工具的教程,本文通過截圖實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
測(cè)試框架JUnit VS TestNG對(duì)比分析
這篇文章主要為大家介紹了測(cè)試框架JUnit VS TestNG對(duì)比分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Notepad++文本比較插件Compare詳解(最新免費(fèi))
Notepad++是一款強(qiáng)大的文本編輯器,它提供了文件對(duì)比功能,可以幫助我們快速找出兩個(gè)文件之間的差異點(diǎn),這篇文章主要介紹了Notepad++文本比較插件Compare詳解(最新免費(fèi)),感興趣的朋友一起看看吧2024-01-01
使用八爪魚采集器采集滾動(dòng)加載和點(diǎn)擊加載數(shù)據(jù)的教程
現(xiàn)在很多網(wǎng)站的列表,需要向下滾動(dòng)頁(yè)面,才能加載出新數(shù)據(jù)。或者點(diǎn)擊“查看更多”加載新數(shù)據(jù)。使用廣泛的火車頭采集器相對(duì)無力,使用八爪魚采集器可以采集滾動(dòng)刷新和點(diǎn)擊刷新。2023-05-05
HarmonyOS Next音樂播放器項(xiàng)目實(shí)現(xiàn)代碼
HarmonyOS Next音樂播放器頁(yè)面是一款基于鴻蒙生態(tài)系統(tǒng)開發(fā)的現(xiàn)代化音樂播放頁(yè)面組件,采用了ArkTS語(yǔ)言和鴻蒙原生組件開發(fā),該應(yīng)用實(shí)現(xiàn)了基本的音樂播放功能,包括播放、暫停、停止以及進(jìn)度條拖動(dòng)等交互操作,展示了HarmonyOS應(yīng)用開發(fā)的典型特性和技術(shù)架構(gòu)2025-03-03
Deepseek R1模型本地化部署+API接口調(diào)用詳細(xì)教程(釋放AI生產(chǎn)力)
本文介紹了本地部署DeepSeekR1模型和通過API調(diào)用將其集成到VSCode中的過程,作者詳細(xì)步驟展示了如何下載和部署DeepSeekR1模型,并提供了解決下載問題的建議,最后,作者解釋了如何在VSCode中使用Cline插件調(diào)用DeepSeekAPI,以實(shí)現(xiàn)智能編碼輔助,感興趣的朋友一起看看吧2025-02-02

