摘要:這里強調一下,之前講過一個操作符按位取反操作符,區別一下他倆,按位取反操作符是針對二進制數每一位全部都取反,包括符號位。
小編是大一菜鳥不贅述,歡迎大佬指點江山(QQ:1319365055)
此前博客點我!點我!請搜索博主 【知曉天空之藍】點我!點我!請搜索博主 【知曉天空之藍】或掃碼進入!
喬喬的gitee代碼庫(打灰人 )歡迎訪問,點我!
(https://blog.51cto.com)感謝支持!
現在是北京時間15:30,剛剛被一道簡單的題折磨了半個下午,問題出在答案的輸出上,猶如困獸,心里面很惱火,覺得自己好菜好菜。天上沒下雨,但心情是灰色的(逐漸網抑云)
1.基本內置類型:byte,int ,char, float, double
2.構造數據類型:
數組類型;
結構體類型:struct
共用體(聯合類型):union
枚舉類型:enum
3.指針類型 :int* p,char* p,float* p,void* p
4.空類型 : void(無類型),通常用于函數的返回類型,函數參數與指針類型。
構造類型又叫自定義類型,在各自參數或者元素類型發生變化就會讓他徹頭徹尾的改變;而基本數據類型的特點就是不可以再分解為其他類型,基本類型就是自我說明,關于他們的作用就不一一贅述了。
那首先要在調試欄打開內存窗口,并搞清楚怎么觀察內存,這是必要的工具
1.地址欄
2.內容
這些密密麻麻的就是內存中的數據,看到這里你可能就會疑惑,不是說內存里存的都是二進制數嗎,這些是什么鬼?是的,沒有錯,但是內存窗口展示內容有限,在有限的范圍內,他只能選擇以 16 進制的形式展示出來,僅僅是展示而已。
3.文本
這個更是人不人鬼不鬼的其實是他根據內存的數據簡單的以文本的格式輸出其可能的內容,無價值簡直就是意義不明。
不論我們在寫代碼時創建了個什么東西,他不會居于虛空,存在載體就會占用內存,而空間的大小是根據我們創建的數據的類型而決定的,我們要回到問題最本質的源頭,在開辟的內存中到底如何去存儲數據?我們不廢話直接創建倆個變量看看便知
int main(){int a = 5;int b = -5;return 0;}
內存窗口打開我們可以取地址查找 a,b 的數據存儲情況:
這里是不是感覺很奇怪,二者為何差異這么大?要搞清楚我們就要繼續深入研究。
說整數的二進制有三種表示方法:原碼,反碼,補碼。
整數分為正數和負數,正負數的區別就在于他們二進制32位數的最高位的 0和1代表著符號位,0為正,1為負,其余才是有效位。
正數的原反補三碼合一,和他本身是一樣的。但是負數就花哨了,負數原碼是按照一個數的正,負直接寫出來的二進制就是原碼。反碼在原碼基礎上,除開符號位進行取反得到。這里強調一下,之前講過一個操作符:~(按位取反操作符),區別一下他倆,按位取反操作符是針對二進制數每一位全部都取反,包括符號位。補碼則是反碼的基礎上+1得到,比如 -7 這個數的原反補分別為:
10000000 00000000 00000000 00000111 (原)
111111111 111111111 111111111 111111000(反)
111111111 111111111 111111111 111111001(補)
b 的 -5 就是 00000000 00000000 00000000 00000101以補碼 11111111 11111111 11111111 11111011 每四個字節為一位化成16 進制就是 0xfffffff3。
既然內存中中存儲的是二進制的補碼,我們現在不談現象談本質,為什么偏偏要是補碼呢?
我們要明白一件事就是計算機算減法是相對不容易的,因為CPU里面沒有減法器,只有加法器,要算 1-1 時只能算作 1+(-1)。計算機用二進制去計算時,我們會發現,當用原碼或者反碼去計算根本行不通,只有補碼才可以實現。
由此看來,補碼的地位是絕對的老大哥,在計算機系統中,數值一律用補碼來存儲,主要原因是:
1.統一了零的編碼
2.將符號位和其它位統一處理
3.將減法運算轉變為加法運算
4.兩個用補碼表示的數相加時,如果最高位(符號位)有進位,則進位被舍棄
由這里看,加法和減法可以統一起來處理,此外補碼和原碼相互轉換時,其運算過程是相同的,不需要額外的硬件電路。
我昨天的博客專門講了大小端存儲模式專題,其實大小端的檢驗也可以用今天的知識來解決:
# include int check_s(){ int i = 1; return (*(char*)&i);}int main(){ int ret = 0; ret = check_s(); if (ret == 1) { printf("小端/n"); } else { printf("大端/n"); } return 0;
其結果:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125072.html
摘要:在符號位中,表示正,表示負。我們知道對于整型來說,內存中存放的是該數的補碼。在計算機系統中,數值一律用補碼來表示和存儲。表示有效數字,。規定對于位的浮點數,最高的位是 ...
摘要:友情提示先關注收藏,再查看,萬字保姆級語言從入門到精通教程。及大牛出天地開始有隨之乃有萬種語年英國劍橋大學推出了語言。 友情提示:先關注收藏,再查看,13 萬字保...
摘要:原始數據類型和原始數據類型實在太簡單,所以只簡單劃幾個重點原始數據類型不可改變原始數據類型一個非常重要的特征就是不可改變。引用數據類型這里的不是狹義的,包含的預定義引用類型,對,這些都是引用數據類型。 JavaScript是腳本語言 計算機語言可以分為三類,機器語言、匯編語言、高級語言。高級語言又可以簡單分為解釋類和編譯類。這個知道就夠了。 機器語言: 計算機所能識別的二進制語言,一般...
摘要:還不清楚原碼反碼補碼的可以到語言從入門到入土操作符篇中的移位操作符處學習一下。比如原碼反碼補碼原碼顯示值補碼數據存放內存中其實存放的是補碼補碼的表示與存儲在計算機系統中,數值一律用補碼來表示和存儲。 ...
摘要:語言深層理解函數中棧幀的創建與銷毀引言引言問題一引言問題二引言問題三一棧的簡單認識內存的簡單了解棧的簡單了解棧的定義棧的結構二寄存器與簡單的匯編指令寄存器的定義寄存器的分類簡單的匯編指令三棧幀的創建于銷毀調試調用堆棧調 ...
閱讀 2671·2021-11-25 09:43
閱讀 2579·2021-11-22 09:34
閱讀 2822·2021-11-12 10:34
閱讀 1430·2021-10-20 13:46
閱讀 2300·2019-08-30 13:21
閱讀 928·2019-08-30 11:21
閱讀 483·2019-08-30 11:20
閱讀 2186·2019-08-29 17:20