女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++編程中整型數(shù)據(jù)在內(nèi)存中存儲是怎么樣的

C語言編程基礎(chǔ) ? 來源:C語言編程學習基地 ? 作者:C語言編程 ? 2021-09-01 15:22 ? 次閱讀

1.整型的歸類

char

short

int

long

以上都分為有符號(signed)與無符號(unsigned)的類型

2.原碼、反碼和補碼

2.1 定義

計算機在表示一個數(shù)字時,是采用二進制的方式,所以為了準確表示一個數(shù)的正負,每一個有符號數(shù)都將其最高位視作是符號位,最高位為0表示正數(shù),最高位為1表示負數(shù)。我們接下來以有符號整型int的數(shù)字進行分析。

一個有符號整數(shù)由 符號位 + 數(shù)值位 組成,數(shù)值位是其最高位,分別以0/1表示正/負

對于正數(shù)來說,反碼補碼都與原碼相同;

對于負數(shù)來說,符合以下3條規(guī)則:

原碼:將十進制數(shù)字直接翻譯為二進制數(shù)

反碼:原碼的符號位不變,其他位按位取反

補碼:反碼+1

而對于整型來說,整型在內(nèi)存中實際上是以補碼的形式進行存儲的。

2.2 補碼的意義

有的同學可能就會問了,為什么計算機要發(fā)展出原碼、反碼、補碼這么多種碼呢?

這就與計算機對于整數(shù)的運算有關(guān)了。

CPU只有加法器,減法在運算時也會被視作一個數(shù)加另一個負數(shù)。考慮到整數(shù)的最高位是符號位,兩個整數(shù)中若包含負數(shù),以原碼直接相加得到的數(shù)一定是不對的。所以問題就變成了如何使得運算簡單而精確,既要處理符號位,又要只進行加法運算,達到以某一種二進制形式的“碼”直接相加就能得到正確結(jié)果。

下面,我們以60+(-18)為例,分別用原碼、反碼、補碼直接進行二進制的運算。

原碼運算:

00000000 00000000 00000000 00111100( 60的原碼)+ 10000000 00000000 00000000 00010010(-18的原碼)-------------------------------------------10000000 00000000 00000000 01001110(某個數(shù)的原碼)

顯然,得到了的原碼轉(zhuǎn)化為10進制是-78,并非正確答案42。

反碼運算:

00000000 00000000 00000000 00111100( 60的反碼)+ 11111111 11111111 11111111 11101101(-18的反碼)-------------------------------------------100000000 00000000 00000000 00101001 截取后32位: 00000000 00000000 00000000 00101001(某個數(shù)的反碼)

顯然,得到了的反碼轉(zhuǎn)化為10進制原碼是41,并非正確答案42,但是只與正確答案相差(+1),于是,我們就想將負數(shù)的反碼+1,即變成“補碼”來進行運算,而又正數(shù)的補碼是原碼本身,這時候我們看看會怎么樣呢?

補碼運算:

00000000 00000000 00000000 00111100( 60的補碼)+ 11111111 11111111 11111111 11101110(-18的反碼)-------------------------------------------100000000 00000000 00000000 00101010 截取后32位: 00000000 00000000 00000000 00101010(某個數(shù)的補碼)

顯然,得到了的補碼轉(zhuǎn)化為10進制原碼是42,我們得到了正確結(jié)果。

2.3 結(jié)論

綜上,我們發(fā)現(xiàn),只要將兩個整數(shù)使用補碼進行運算,就不需要考慮它們的符號位了,將它們的所有位直接簡單相加即可,就能得到正確的結(jié)果。

2.4* 負數(shù)二進制補碼的快速轉(zhuǎn)化

對于char類型整數(shù),-1用二進制補碼表示為

當我們已知一個負數(shù)的二進制補碼時,用比這個數(shù)多一位的、最高位為1、其他位全0、這里應(yīng)為9位的二進制數(shù)

直接減去-1的二進制補碼得

得到的數(shù)就是十進制(-1)的絕對值,也就是1,只要加上負號,就能快速得到這個負數(shù)二進制補碼的十進制原碼。

原理十分簡單,一個負數(shù)的 原碼加上補碼 = 原碼+反碼+1 = 所有二進制位全1再加1 = 多一位的、最高位為1、其他位全0

3. 大小端字節(jié)序

3.1 什么是大小端

在內(nèi)存中,數(shù)據(jù)的大小端存儲是在 字節(jié) 尺度上進行討論的

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

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

3.2 為什么有大端和小端之分

在計算機系統(tǒng)中,我們通常是以字節(jié)為單位存儲數(shù)據(jù)的,每個地址對應(yīng)一個字節(jié)。

一個字節(jié)為8bit,但是在C語言中除了8bit的char之外,還有16bit的short,32bit的int。另外,對于位數(shù)大于8位的處理器,例如16位和32位的處理器,由于寄存器寬度大于一個字節(jié),那么必然存在著如何將多個字節(jié)安排的問題。這邊導(dǎo)致了大小端存儲模式的誕生。

我們以int類型的數(shù) 0x01ff4218 為例(兩個十六進制位即為1個字節(jié)),看一下在大小端下這4個字節(jié)分別是如何分配的

3.3 寫一段代碼來判斷你的機器的大小端字節(jié)序

算法簡單概括:截取4個字節(jié)大小的int整型的1個字節(jié)的低位。若機器為大端字節(jié)序,該字節(jié)存儲0x00;若機器為小端字節(jié)序,該字節(jié)存儲0x01;

#include《stdio.h》//實現(xiàn)方法1int check1(){ int i = 1; return *(char*)&i;}

//實現(xiàn)方法2int check2(){ union check { int i; char c; }ch = {1}; return ch.c;}

int main(){ int ret = check1(); if (ret == 1) { printf(“小端

”); } else { printf(“大端

”); } return 0;}

責任編輯:haq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7242

    瀏覽量

    91038
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3682

    瀏覽量

    94882
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2117

    瀏覽量

    74789

原文標題:C/C++編程知識:整型數(shù)據(jù)在內(nèi)存中的存儲!講解+示例

文章出處:【微信號:xx-cyy,微信公眾號:C語言編程基礎(chǔ)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    主流的 MCU 開發(fā)語言為什么是 C 而不是 C++

    在單片機的地界兒里,C語言穩(wěn)坐中軍帳,C++想分杯羹?難嘍。咱電子工程師天天跟那針尖大的內(nèi)存空間較勁,C++那些花里胡哨的玩意兒,在這兒真玩不轉(zhuǎn)。先說
    的頭像 發(fā)表于 05-21 10:33 ?284次閱讀
    主流的 MCU 開發(fā)語言為什么是 <b class='flag-5'>C</b> 而不是 <b class='flag-5'>C++</b>?

    C++學到什么程度可以找工作?

    C++學到什么程度可以找工作?要使用C++找到工作,特別是作為軟件開發(fā)人員或相關(guān)職位,通常需要掌握以下幾個方面: 1. **語言基礎(chǔ)**:你需要對C++的核心概念有扎實的理解,包括但不限于指針、
    發(fā)表于 03-13 10:19

    Spire.XLS for C++組件說明

    Spire.XLS for C++ 是一款專業(yè)的 C++ Excel 組件,可以用在各種 C++ 框架和應(yīng)用程序。Spire.XLS for C+
    的頭像 發(fā)表于 01-14 09:40 ?527次閱讀
    Spire.XLS for <b class='flag-5'>C++</b>組件說明

    EE-132:使用VisualDSP將C代碼和數(shù)據(jù)模塊放入SHARC存儲

    電子發(fā)燒友網(wǎng)站提供《EE-132:使用VisualDSP將C代碼和數(shù)據(jù)模塊放入SHARC存儲.pdf》資料免費下載
    發(fā)表于 01-07 13:55 ?0次下載
    EE-132:使用VisualDSP將<b class='flag-5'>C</b>代碼和<b class='flag-5'>數(shù)據(jù)</b>模塊放入SHARC<b class='flag-5'>存儲</b>器<b class='flag-5'>中</b>

    EE-112:模擬C++的類實現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《EE-112:模擬C++的類實現(xiàn).pdf》資料免費下載
    發(fā)表于 01-03 15:15 ?0次下載
    EE-112:模擬<b class='flag-5'>C++</b><b class='flag-5'>中</b>的類實現(xiàn)

    C++新手容易犯的十個編程錯誤

    簡單的總結(jié)一下?C++ 新手容易犯的一些編程錯誤,給新人們提供一個參考。 1 有些關(guān)鍵字在 cpp 文件多寫了 對于 C++ 類,一些關(guān)鍵字只要寫在 .h 中就好,cpp 中就不用再
    的頭像 發(fā)表于 11-15 12:42 ?922次閱讀

    C語言和C++結(jié)構(gòu)體的區(qū)別

    同樣是結(jié)構(gòu)體,看看在C語言和C++中有什么區(qū)別?
    的頭像 發(fā)表于 10-30 15:11 ?665次閱讀

    內(nèi)存儲器主要用來存儲什么

    器的主要功能 數(shù)據(jù)存儲內(nèi)存儲器用于存儲CPU需要直接訪問的數(shù)據(jù),這些數(shù)據(jù)可能是程序代碼、用戶
    的頭像 發(fā)表于 10-14 09:55 ?2180次閱讀

    使用OpenVINO GenAI API在C++構(gòu)建AI應(yīng)用程序

    許多桌面應(yīng)用程序是使用 C++ 開發(fā)的,而將生成式AI(GenAI)功能集成到這些應(yīng)用程序可能會很具有挑戰(zhàn)性,尤其是因為使用像 Hugging Face 這樣的 Python 庫的復(fù)雜性。C++
    的頭像 發(fā)表于 10-12 09:36 ?1021次閱讀
    使用OpenVINO GenAI API在<b class='flag-5'>C++</b><b class='flag-5'>中</b>構(gòu)建AI應(yīng)用程序

    邏輯內(nèi)存和物理內(nèi)存的區(qū)別

    Access Memory),是計算機硬件的一部分,用于存儲計算機當前正在使用的數(shù)據(jù)和程序。物理內(nèi)存是計算機的一種易失性存儲器,這意味著
    的頭像 發(fā)表于 09-27 15:38 ?1641次閱讀

    ostream在c++的用法

    ostream 是 C++ 標準庫中一個非常重要的類,它位于 頭文件(實際上,更常見的是通過包含 頭文件來間接包含 ,因為 包含了 和 )。 ostream 類及其派生類(如 std::cout
    的頭像 發(fā)表于 09-20 15:11 ?1708次閱讀

    串行電可擦除編程只讀存儲器AD24C64數(shù)據(jù)

    AD24C64是一款串行電可擦除編程只讀存儲器(EEPROM)。存儲器可存儲8192個字節(jié)數(shù)據(jù)
    發(fā)表于 09-11 09:13 ?0次下載

    ModusToolbox 3.2在c代碼包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個用純 C 語言編寫的 XMC4700 項目。 我正在嘗試添加一些 C++ 函數(shù),并將其合并到我的原始代碼。 我可以構(gòu)建獨立的 .cpp/.hpp
    發(fā)表于 07-23 08:21

    C++實現(xiàn)類似instanceof的方法

    函數(shù),可實際上C++沒有。但是別著急,其實C++中有兩種簡單的方法可以實現(xiàn)類似Java的instanceof的功能。 在 C++
    的頭像 發(fā)表于 07-18 10:16 ?865次閱讀
    <b class='flag-5'>C++</b><b class='flag-5'>中</b>實現(xiàn)類似instanceof的方法

    Python變量在內(nèi)存存儲方式

    類方法使用@classmethod裝飾器定義,它們的第一個參數(shù)通常命名為cls,代表類本身。
    的頭像 發(fā)表于 07-16 16:29 ?478次閱讀