国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數據在內存中的存儲

BicycleWarrior / 1882人閱讀

摘要:文章目錄一數據類型二整型在內存中的存儲原碼反碼補碼大小端三例題練習一數據類型在語言中有整型浮點型構造類型指針類型等。正數的原反補碼都相同對于整形來說數據在內存中存放的都是補碼。

一、數據類型

在c語言中有整型、浮點型、構造類型、指針類型等。

類型的意義在于:

  1. 使用不同的類型決定了開辟空間的大小
  2. 決定了如何使用內存空間

二、整型在內存中的存儲

知道了一個變量的類型,就知道可以開辟的空間的大小。
那例如int型具體是如何在內存中進行存儲的呢?
需要了解下面的概念:

1.原碼、反碼、補碼

計算機中的有符號數有三種表示方法,即原碼、反碼和補碼。
三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位
三種表示方法各不相同。

原碼
直接將二進制按照正負數的形式翻譯成二進制就可以。

反碼
將原碼的符號位不變,其他位依次按位取反就可以得到了。

補碼
反碼+1就得到補碼。

正數的原、反、補碼都相同
對于整形來說:數據在內存中存放的都是補碼。
原因在于,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。此外,補碼與原碼相互轉換,其運算過程是相同的,不需要額外的硬件電路。


看看在內存中的存儲:
按照推理,a的補碼應該是0000 0014,b的補碼應該是ffff fff6
而在內存中所存儲的形式有點不一樣,這可能就得了解大小端的概念了

2.大小端

大端(存儲)模式,是指數據的低位保存在內存的高地址中,而數據的高位,保存在內存的低地址中;
小端(存儲)模式,是指數據的低位保存在內存的低地址中,而數據的高位,,保存在內存的高地址中。

從圖中可以看出這臺電腦是小端存儲的,因為它數值的低權值位存儲在低地址處。

三、例題練習

//輸出什么?#include int main(){    char a= -1;    signed char b=-1;    unsigned char c=-1;    printf("a=%d,b=%d,c=%d/n",a,b,c);    return 0; }

結果:

解析:

首先-1是整型常量,在32位下的補碼是1111 1111 1111 1111 1111 1111 1111 1111 ,在存入char型變量時發生截斷,所以在內存中存入a b c的數據都是1111 1111,是一樣的,這是因為數據的存入和目標變量沒有關系,目標變量只提供存儲空間。
printf也是函數,傳參就要發生值拷貝,就需要用到CPU,也同樣就會發生隱式轉換。
ab都是有符號字符型,發生整型提升時補上對應的符號位,即1111 1111 1111 1111 1111 1111 1111 1111,還是-1的補碼,按照%d的有符號整數進行打印時,就是-1。
c變量是無符號字符型,在進行整型提升時默認補0,也就是0000 0000 0000 0000 0000 0000 1111 1111,按照%d進行打印后是255

#include int main(){    char a = -128;    printf("%u/n",a);    return 0; }

結果:

分析:

#include int main(){    char a = 128;    printf("%u/n",a);    return 0; }

結果:
和上一題一樣,因為128和-128發生截斷后在a里存的數據是一樣的

    int i = -20;    unsigned int j = 10;    printf("%d/n", i + j);

結果:

分析:

因為并沒有對兩個變量的數據進行修改,想加過后按照%d的結果就是兩個數直接相加的結果

    unsigned int i;    for (i = 9;i >= 0;i--)    {        printf("%u/n", i);    }

結果:
死循環,從9->0->255->0->255,因為無符號數始終大等于0

int main(){    char a[1000];    int i;    for(i=0; i<1000; i++)   {        a[i] = -1-i;   }    printf("%d",strlen(a));    return 0; }

結果:

分析:

#include unsigned char i = 0;int main(){    for(i = 0;i<=255;i++)   {        printf("hello world/n");   }    return 0; }

結果:
死循環,i 的值從0->255一直循環

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/121412.html

相關文章

  • Express.js?中的 Sessions 如何工作?(譯)

    世界上任何一個擁有用戶數據的 web 應用都必須處理 sessions。作為一名開發者,我們必須要知道它們是什么以及如何處理它們。在這篇文章中,我想要分享的是: session 是什么? session 如何存儲數據? 你如何決定存放 session 數據的位置? 在 sessions 工作時,你必須意識到的安全性上的影響有哪些?在一些示例代碼中,我將會運用?session npm modul...

    Hydrogen 評論0 收藏0
  • 【C語言進階】??數據類型&amp;&amp;整型內存中的存儲

    目錄 ? ?一、數據類型介紹 二、類型的意義 三、類型的基本歸類 整型家族 浮點數家族 構造類型(自定義類型) 指針類型 空類型 四、整形在內存中的存儲 原碼、反碼、補碼 大小端字節序 為什么有大端和小端? 一道經典筆試題 ?一、數據類型介紹 數據從大的方向分為兩類: 內置類型自定義類型內置類型我們前面已經學習過,如下: char? ? ? ? ? ? //字符數據類型 short? ? ? ...

    Xufc 評論0 收藏0
  • C語言進階第一問:數據內存中是如何存儲的?(手把手帶你深度剖析數據內卒中的存儲,超全解析,碼住不

    摘要:在符號位中,表示正,表示負。我們知道對于整型來說,內存中存放的是該數的補碼。在計算機系統中,數值一律用補碼來表示和存儲。表示有效數字,。規定對于位的浮點數,最高的位是 ...

    ghnor 評論0 收藏0
  • Mongo、Redis、Memcached對比及知識總結

    摘要:當重啟時,將會讀取文件進行重放以恢復到關閉前的最后時刻。伸縮性受到線程數的限制,線程數的調度對也是不小的負擔。所以允許我們設置線程池的大小,對需要從文件中加載相應數據的讀取請求進行并發操作,減少阻塞的時間。 存儲原理(持久化) Mongo Mongo的數據將會保存在底層文件系統,因此存儲容量遠大于redis和memcached。一個database中所有的collections以及索...

    Vultr 評論0 收藏0

發表評論

0條評論

BicycleWarrior

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<