摘要:目錄數據在計算機的存儲方式補碼,反碼,原碼數據在計算機的存儲方式補碼,反碼,原碼整形在內存中的存儲整形在內存中的存儲整形類型整形類型大端字節序和小端字節序大端字節序和小端字節序浮點數在內存的儲存浮點數在內
目錄
在32位機器上,計算機儲存數據是用32個比特位來儲存數據,也就是32個0,其中第一位數為符號位,大多數情況用來表示整數是正的還是負的,我們先從原碼說起,1和-1的原碼分別為:
正數的反碼不變,負數的反碼在其原碼的基礎上符號位不變,其他位按位取反(0變成1,1變成0),即:
?正數的補碼還是不變,負數的補碼在其反碼的基礎上加1:
?所以我們可以總結:正數的原碼,反碼和補碼都相同,而負數的原碼,反碼和補碼在轉換時才會不同,計算機在儲存整形時用的都是補碼。
我們知道C語言的整形類型有
我們知道char是字符類型,但是char類型儲存字符的方式也是儲存數字,然后在通過ascii碼表轉化為對應的字符,所以在這里我也將char當作是整形的一類了。
計算機會分配給不同類型不同的字節大小,也就是可以儲存數字的大小:
?對于不同整形無符號的問題,我拿char舉個栗子
char類型的最大值和最小值在計算機的存儲:
10000000~011111111? 10000000為-128(這是計算機規定的),111111111為-127,011111111為127,
所以大小范圍是-128到127
而無符號char類型,就是將最后一位符號位變成計算大小的位,即:
00000000~111111111=00000000~01111111+2^8,也就是0到255
在這里我們引入一下內存單元的概念,內存單元代表的是一個字節空間,即8個比特位,計算機會給這個內存空間分配一個地址(其實就是指針)。
當我們創建一個int變量,并且給他賦一個16進制的值 0x11223344,那么計算機會給他連續開辟4個字節大小的空間,他會有4個內存單元,接下來11將會被放在第一個內存單元,22放在第二個內存單元,下面也是一樣,那么計算機會怎么給這些內存單元分配地址呢?于是就產生了大端字節序和小端字節序。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?~兩位16進制的范圍大小等于8個比特位的范圍大小?
大端字節序存儲:高字節序的內容放在低地址,低字節序的內容放在高地址
小端字節序存儲:高字節序的內容放在高地址,低字節序的內容放在低地址? ? ? ?
?其中:高字節序代表高位數,即11,低字節序代表低位數,
我們可以測試下自己的編譯器是大端的還是小端的,
#includeint main(){ int a = 0x11223344; char* p = (char*)&a; printf("%0x", *p); return 0;}
如果運行的結果為44,則為小端,11為大端
根據國際標準,任意一個二進制浮點數都可以表示成:
(-1)^S*M*2^E??
(-1)^s表示符號位,-1的s次冪要么是正數,要么是負數PM表示有效數字,M大于等于1,小于2;
2^E表示指數位。? ? ? ? ? ? ? ? ? ? ? ? ? ? -----總的來說就是二進制的科學計數法
?
浮點數在內存的存儲其實就是S,M和E的存儲
單精度浮點型float:最高的一位是符號位s,接著的8位是指數E,剩下的23位為有效數字M
?其中,E的大小0~255
雙精度浮點型double:最高的一位是符號位s,接著的11位是指數E,剩下的52位為有效數字M
?其中E的大小0~2047
———————————————————————————————————————————
M的存儲:
因為1<=M<2,所以M肯定為1.xxxxxxx,所以標準規定在計算機存儲M的時候,不儲存第一位數字1,當讀取的時候才加上1,這樣做的目的是節省一位有效數字,使計算機保存更多其他有效數字。
———————————————————————————————————————————
E的存儲:
首先,E在計算機的存儲肯定是一個無符號整形,這就意味著,當E為11位,那它的大小范圍是0~2047,當E是8位時,它的大小范圍為0~255
但是我們知道,在科學計數法表數的示時,它的指數位是可以取負,所以科學家為了使得E表示負數,在將E存儲前加上一個中間數字,8位的E的中間數位127,11位的E為1023,這樣在讀取的時候給E減去這個中間數,在計算的時候E就能當作負數帶來計算了。、
E的特殊情況
當E全位0的時候,那么E的真實值位1-127(或者1-1023),接下來在計算的時候M不會再加1,因為E為全0的時候算出來的數是無限接近于0的數,所以干脆就不給M加1,便于表示+0和-0;
當E全為1的時候,如果有效數字全為0,表示+無窮或者-無窮
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125631.html
摘要:語言基礎之操作符詳解操作符的分類算術操作符移位操作符位操作符邏輯操作符逗號表達式表達式求值隱式類型轉換算術轉換操作符的屬性今天就帶各位大佬來了解一波語言的操作符。 ...
摘要:還不清楚原碼反碼補碼的可以到語言從入門到入土操作符篇中的移位操作符處學習一下。比如原碼反碼補碼原碼顯示值補碼數據存放內存中其實存放的是補碼補碼的表示與存儲在計算機系統中,數值一律用補碼來表示和存儲。 ...
摘要:操作符的兩個操作數必須為整數。函數調用用作為函數調用操作符。訪問一個結構的成員結構體成員名結構體指針成員名還是熟悉的栗子在之前的博客請回答語言初識語言下入門的結構體出現過的栗子名字圖鑒編號身高重量屬性類型 ...
目錄 ? ?一、數據類型介紹 二、類型的意義 三、類型的基本歸類 整型家族 浮點數家族 構造類型(自定義類型) 指針類型 空類型 四、整形在內存中的存儲 原碼、反碼、補碼 大小端字節序 為什么有大端和小端? 一道經典筆試題 ?一、數據類型介紹 數據從大的方向分為兩類: 內置類型自定義類型內置類型我們前面已經學習過,如下: char? ? ? ? ? ? //字符數據類型 short? ? ? ...
閱讀 3733·2023-01-11 11:02
閱讀 4243·2023-01-11 11:02
閱讀 3049·2023-01-11 11:02
閱讀 5180·2023-01-11 11:02
閱讀 4733·2023-01-11 11:02
閱讀 5532·2023-01-11 11:02
閱讀 5312·2023-01-11 11:02
閱讀 3986·2023-01-11 11:02