C語言基礎 整數資料在底層的儲存

2021-10-11 17:36:24 字數 787 閱讀 8703

整數分為三種:

正整數負整數

零此三種中,在計算機的儲存中,可以將0和正整數歸為一類

計算機在底層儲存這些整數的時候,儲存的是資料的二進位制數的補碼,由0和1組成,對於第一類(正整數和0)來講,只要符合二進位制規則即可儲存,那麼對於負數來講,無法直接以01**的形式寫入,這時候就出現了一種特定的儲存方法,仍然以01**為基礎,只是改變了計數的規則

第一類:二進位制編碼 == 反碼 == 補碼

第一類較為簡單,在此不做過多解釋,對於不知道二進位制編碼和反碼、補碼的請自覺翻閱以前的筆記

第二類:雖然儲存的都是補碼,但負數的補碼為他的反碼加1,而他的反碼為他的相反數的二進位制編碼和0位異或之後的編碼

i = 1;二進位制編碼為:00000000 00000000 00000000 00000001

j = -1;相反數的二進位制編碼為:00000000 00000000 00000000 00000001

此時,i在計算機當中儲存的值就是這個二進位制的補碼也就是他本身

對於j來講,儲存的是他相反數二進位制編碼和0唯異或之後的編碼,並且加1,即儲存的值為

11111111 11111111 11111111 11111111

其最高位為符號位:為1則為負數,為0則為正數

為什麼,在計算機中儲存的補碼,而不搞的簡單一點?何必呢?

這是因為計算機的cpu當中只有加法器,而沒有減法器和其他演算法器。

因為一切其他運算都可以用加法來表示,儲存補碼能夠大大加大計算機的運算能力,實屬偉大發明。

資料在底層的儲存模式

面試題 設計程式判斷大小端 這裡可以有兩種方式 1 寫乙個函式通過資料型別 int main 2 通過聯合體 聯合體種的變數共用一塊記憶體 union un int main 外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳 img 3cuoytpg 1570687707359 en re...

C語言實現超長正整數與一位正整數數的相除

原理 除法豎式計算的c語言實現 在這裡假設被除數不超過1000位,除數只有1位 include include include char a 1010 a陣列存放被除數 char q,k 指標q指向乙個存放商的動態分配的陣列 int b 除數 int r 餘數 用於除法計算的函式,原理參考除法豎式計...

C語言的資料儲存區

c語言分為4個儲存區域 區靜態儲存區 棧區堆區 區 存放編譯後的可執行 的區域。靜態儲存區 儲存著靜態變數 static修飾的變數 如 static int a 和一些常量 如 char p abcd 其中的 abcd 就是儲存在靜態儲存區的 並且被認為是唯讀的 以及全域性變數 全域性變數和靜態變數...