最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言中數(shù)據(jù)是如何存儲在內(nèi)存中的

 更新時間:2022年04月22日 10:19:42   作者:耀 星  
使用編程語言進行編程時,需要用到各種變量來存儲各種信息。變量保留的是它所存儲的值的內(nèi)存位置。這意味著,當您創(chuàng)建一個變量時,就會在內(nèi)存中保留一些空間。您可能需要存儲各種數(shù)據(jù)類型的信息,操作系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲什么

前言

在計算機內(nèi)存中,數(shù)據(jù)的存儲方式都是以0和1的形式存儲,也就是二進制的形式,數(shù)據(jù)是如何向內(nèi)存寫入的呢?整形數(shù)據(jù)以補碼的形式存儲,浮點型的存儲規(guī)則較多,類似于科學計數(shù)法。

‍數(shù)據(jù)類型介紹

為什么需要有這些數(shù)據(jù)類型?

數(shù)據(jù)類型解決了數(shù)據(jù)存儲的問題。

‍整形數(shù)據(jù)在內(nèi)存中存儲

整數(shù)中有三種二進制表示形式,分別是原碼、反碼、補碼,正整數(shù)的原碼 = 反碼 = 補碼,通常取最高位作為符號位。

原碼:直接將正負整數(shù)按照二進制形式轉(zhuǎn)換即可。

15原碼:  (0) 1111 
-15原碼: (1) 1111
23原碼:  (0) 10111
-28原碼: (1) 11100
注意:()表示符號位,1表示負,0表示正。

補碼:負整數(shù)的補碼將原碼的符號位不變,其它位依次取反。

15反碼:  (0) 1111 
-15反碼: (1) 0000
23反碼:  (0) 10111
-28反碼: (1) 00011

反碼:負整數(shù)的反碼在補碼的基礎上+1

15補碼:  (0) 1111 
-15補碼: (1) 0001
23補碼:  (0) 11000
-28補碼: (1) 00100

對于整形數(shù)據(jù)來說:數(shù)據(jù)存放的實際是存放補碼。

當我們定義變量時,系統(tǒng)會根據(jù)變量的數(shù)據(jù)類型,給變量開辟空間。這也是為什么要引入數(shù)據(jù)類型這個概念。

1.舉例:5是如何存儲到內(nèi)存中

5是一個整形常量,在C語言中寫一個整形常量,不超過int類型所能表示的范圍,以32位表示整形常量。

5的原碼碼 = 補碼 = 反碼

5原碼:00000000 00000000 00000000 00000101

5存入short類型的變量:取后16位

00000000 00000000 00000000 00000101

5存入int類型的變量:取32位

00000000 00000000 00000000 00000101

2.舉例:-10是如何存儲到內(nèi)存中的 

-10原碼:10000000 00000000 00000000 00001010

-10反碼:11111111 11111111 11111111 11110101

-10補碼:11111111 11111111 11111111 11110110

-10存入short類型:取后16位

11111111 11111111 11111111 11110110

-10存入int類型變量:取32位

11111111 11111111 11111111 11110110

 如何取出數(shù)據(jù)?

取出數(shù)據(jù)首先要知道數(shù)據(jù)的地址,得到地址后,如何確定取出范圍,由變量的數(shù)據(jù)類型來決定。

int main()
{
	/*
	a的原碼、反碼、補碼:00000000 10011000 10010110 1000000
	*/
	int a = 10000000;
	/*
	b是short*類型,解引用訪問時,只有訪問兩個字節(jié)的權限
	*b拿出的數(shù)據(jù)是補碼: 10010110 10000000->原碼:11101001 10000000
	*/
	short* b = &a;
	printf("%d", *b);//-27008
	return 0;
}

為什么要使用補碼的形式存儲?

在計算機中CPU有中,只有加法器。以補碼形式存儲,符號位參與運算,既可以計算減法也可以計算加法。

大端存儲模式:指數(shù)據(jù)的低位保存在內(nèi)存的高地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的低地址中。

小端存儲模式:指數(shù)據(jù)的低位保存在內(nèi)存的低地址中,而數(shù)據(jù)的高位,保存在內(nèi)存的高地址中。

 大小端主要由處理器決定,與編譯器,操作系統(tǒng)這些沒有直接的關系。

‍浮點型數(shù)據(jù)在內(nèi)存存儲

根據(jù)國際標準IEEE(電氣和電子工程協(xié)會)754,任意一個二進制浮點數(shù)V可以表示成下面的形式:

  • (-1)S*M*2^E
  • (-1)S表示符號位,當S = 0,V為正數(shù);S = -1,V為負數(shù)
  • M表示有效數(shù)值,大于等于1,小于2
  • 2^E表示指數(shù)位 

類似于科學計數(shù)法:1090 = 1.090*10^3 

IEEE754規(guī)定單精度浮點型和雙精度浮點型存儲模型

IEEE 754對有效數(shù)字M和指數(shù)E,還有一些特別的規(guī)定。

1<=M<2,M可以寫成1.xxxxxx的形式,xxxxxx表示小數(shù)部分。

IEEE754規(guī)定,在計算機內(nèi)部保存M時,默認這個數(shù)的第一位總是1,因此可以舍去,只保存后面的xxxxxx部分。在讀取時,再把第一位添上。節(jié)省一位有效數(shù)字.

對于指數(shù)E,情況比較多。

首先E為無符號整數(shù),如果E為八位,取值范圍時0~255,E為11位,取值范圍為0~2047,但是再科學計數(shù)法中E可以出現(xiàn)負數(shù),所以IEEE 754則規(guī)定,存入內(nèi)存E的真實數(shù)必須加上一個中間數(shù),對于八位的E,中間數(shù)為127,對于11位的E,中間數(shù)位1023。例如2^13的E是13,所以在保存E時,必須保存成13+127 = 140,即10001100。

指數(shù)E從內(nèi)存中取出還可以分為3種情況

1.E不全為0或不全為1

這時浮點數(shù)就采用下面的規(guī)則表示,即指數(shù)E的計算值減去127(或1023),得到真實值,再將有效數(shù)字M前加上第一位的1。

比如:

0.5的二進制位0.1,由于規(guī)定整數(shù)部分1<=M<2,即第一位必須位1,則將小數(shù)點右移一位,則為1.0*2^(-1),E的實際存儲位-1+127,E的實際存儲為01111110,M = 1.0,小數(shù)部分為0,M的存儲為23位00000000000000000000000。

則0.5的二進制表示形式位:

0 01111110 00000000 00000000 0000000

2.E全為0

這時,浮點數(shù)的指數(shù)E等于1-127(或者1-1023),即為真實值

有效數(shù)字M不再加上第一位的1,而是還原位0.xxxxxx的小數(shù),這樣可以表示0,以及接近于0的很小數(shù)字。

3.E全為1

如果有效數(shù)字M全位0,表示無窮大。

舉例:

10.0轉(zhuǎn)化為二進制形式為1010.0,相當于:1.010*2^3,按照標準格式 可得S = 0,M = 1.010,E = 3。

舉例1:7.25是如何存儲到內(nèi)存中的呢?

首先將7.25轉(zhuǎn)化為二進制111.01

寫成標準形式:1.1101*2^2

S = 0,M = 1101,E = 2+127

0 10000001 11010000 00000000 0000000

驗證: 

有誤的地方還請批評指正。 

到此這篇關于C語言中數(shù)據(jù)是如何存儲在內(nèi)存中的的文章就介紹到這了,更多相關C語言數(shù)據(jù)存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • c++分離講解模板的概念與使用

    c++分離講解模板的概念與使用

    人們需要編寫多個形式和功能都相似的函數(shù),因此有了函數(shù)模板來減少重復勞動;人們也需要編寫多個形式和功能都相似的類,于是 C++ 引人了類模板的概念,編譯器從類模板可以自動生成多個類,避免了程序員的重復勞動
    2022-04-04
  • C語言實現(xiàn)登錄注冊和忘記密碼功能

    C語言實現(xiàn)登錄注冊和忘記密碼功能

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)登錄、注冊和忘記密碼功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • Opencv?視頻讀取與寫入的實現(xiàn)示例

    Opencv?視頻讀取與寫入的實現(xiàn)示例

    本文將介紹如何使用OpenCV進行視頻讀寫。通過閱讀本文,您將了解如何讀取視頻文件、處理視頻幀、寫入視頻文件等操作,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • 基于C++的農(nóng)夫過河問題算法設計與實現(xiàn)方法

    基于C++的農(nóng)夫過河問題算法設計與實現(xiàn)方法

    這篇文章主要介紹了基于C++的農(nóng)夫過河問題算法設計與實現(xiàn)方法,簡單描述了農(nóng)夫過河問題,并結(jié)合實例形式詳細分析了基于C++實現(xiàn)農(nóng)夫過河問題的相關算法實現(xiàn)步驟與操作技巧,需要的朋友可以參考下
    2017-09-09
  • c程序生成并使用共享庫的操作方法

    c程序生成并使用共享庫的操作方法

    在C語言開發(fā)中,共享庫可以減少程序體量并實現(xiàn)功能共享,本文詳細介紹了如何創(chuàng)建一個實現(xiàn)基本數(shù)學功能的共享庫,并展示了其他程序如何利用這個庫,步驟包括編寫源代碼、編譯成目標文件、鏈接成共享庫以及如何在其他程序中使用這個庫
    2024-09-09
  • C語言文字藝術之數(shù)據(jù)輸入輸出

    C語言文字藝術之數(shù)據(jù)輸入輸出

    這篇文章主要介紹了C語言文字藝術之數(shù)據(jù)輸入輸出,C語言的語句用來向計算機系統(tǒng)發(fā)出操作指令。一條語句編寫完成經(jīng)過編譯后產(chǎn)生若干條機器指
    2022-07-07
  • C++讀取WAV音頻文件的頭部數(shù)據(jù)的實現(xiàn)方法

    C++讀取WAV音頻文件的頭部數(shù)據(jù)的實現(xiàn)方法

    這篇文章主要介紹了C++讀取WAV音頻文件的頭部數(shù)據(jù)的實現(xiàn)方法的相關資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的方法,需要的朋友可以參考下
    2017-10-10
  • C語言制作掃雷游戲(圖形庫)

    C語言制作掃雷游戲(圖形庫)

    這篇文章主要為大家詳細介紹了C語言制作掃雷游戲,結(jié)合圖形庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Visual Studio Code安裝和配置的教程

    Visual Studio Code安裝和配置的教程

    這篇文章主要介紹了Visual Studio Code安裝和配置,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言遞歸實現(xiàn)字符串逆序的方式詳解

    C語言遞歸實現(xiàn)字符串逆序的方式詳解

    這篇文章主要介紹了C語言遞歸實現(xiàn)字符串逆序的方式詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10

最新評論

依兰县| 武陟县| 清水河县| 当涂县| 怀宁县| 翁源县| 从江县| 肃南| 泸西县| 鲁甸县| 保靖县| 靖州| 手游| 安国市| 南平市| 开封市| 静安区| 遂昌县| 黄冈市| 黄梅县| 铜陵市| 康保县| 天津市| 岳池县| 库车县| 静安区| 凤山县| 阿瓦提县| 阳朔县| 祁门县| 河池市| 屏东市| 桃江县| 紫阳县| 微博| 黄陵县| 阿图什市| 青海省| 本溪| 班戈县| 龙泉市|