整型資料在記憶體中如何儲存

2021-08-31 16:40:06 字數 1886 閱讀 4599

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

(以下討論,針對32位的計算機系統。。)

問:int型資料佔幾個位元組?答:4位元組。地球上這個群體的人都知道。

再問:這4個位元組,即32個二進位制位,又是何儲存?這就進入計算機的「底層」了。這個事情,學習程式設計的童鞋,可以懂。

儲存的方式,和我們拍腦袋想得不太一樣,概括一下,就是低位在前,高位在後

本文直觀一些,看懂以下程式中資料的儲存,也便知道這個安排。

(源程式,及在watch視窗中用多種方式看x.c的方法,見文後附件。)

在程式中,由於聯合體儲存的特點,變數x佔4個位元組。我們可以從3個角度觀察這4個位元組:(1) 整體看,是乙個int型資料;(2) 分成2部分看,是兩個短整型資料;(3) 分成4部分看,是4個單位元組的資料。

但無論怎麼看,就是這4個位元組。無論用哪種形式運算元據,使用的也就是這4個位元組。聯合體為我們提供了從不同的角度使用這4個位元組的方式。

x.c[0]到x.c[3]的值分別為65\66\67\68,這好理解。

x.si[0]佔的2位元組,與x.c[0]和x.c[1]相同。驗證一下:16961=66×256+65(66是』b』的acsii值,65是』a』的ascii值,是字元的儲存形式)。注意,這裡體現儲存資料時低位在前,高位在後,低位是65,高位是66。正如十進位制數98中,高位是9,低位是8,所以98=9×10+8一樣。因為是高位,所以乘以位權10,表示9這個符號代表的其實是90。66×256,是因為儲存66(『b』)的那乙個位元組的位置,比儲存65(『a』)的那乙個位元組的位置高8位,所以乘以2的8次方,即256。

概括講,儲存2位元組的16961時,其低8位,是65,在前(x.c[0]),而其高8位,是66,在後(x.c[1])。低位在前,高位在後

請自行驗證:17475=68×256+67,體現低位在前,高位在後。(x.si[0]佔的2位元組,與x.c[2]和x.c[3]相同)

再請驗證:1145258561=17475×256×256+16961,也體現低位在前,高位在後。(x.i佔的4位元組,與x.si[0]和x.si[1]相同)

再請驗證:1145258561=68×256×256×256+67×256×256+66×256+65。同樣的道理。

換種寫法,是1145258561=(((68×256+67)×256+66)×256+65。

再看截圖,品味低位在前,高位在後

這樣安排的道理,在以後的關於「計算機的原理」的有關專業課中會接觸到。

#include 

using

namespace

std;union un;int main()

附2:在watch視窗中用多種方式看x.c的方法

在watch視窗中,除自動顯示的區域性變數的值,還可以自行輸入表示式跟蹤。

方法是,直接在**中寫下表示式,如圖中,x.c,其他任意。

輸入表示式後,在上面點右鍵,會有幾個選項,點properties…(屬性),然後就是如下的視窗:

任性地多角度觀察吧!

給我老師的人工智慧教程打call!

關於整型在記憶體中的資料儲存的方式

計算機中的整型有符號數有三種表示方法,即原碼 反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示 正 用1表示 負 而數值位三種表示方法各不相同。原碼 直接將數值按照正負數的形式翻譯成二進位制就是這個數的原碼 反碼 將原碼的符號位不變,其他位依次按位取反就可以得到了反碼.補碼 反碼...

128在記憶體中如何儲存

在c語言的學習中,我們都知道型別分為有符號和無符號,無符號型別能夠定義的最大值是有符號所定義最大值的二倍加一,因為二者中都有乙個0的存在所影響的。那麼負的最小值是怎麼儲存的呢,這裡就拿char型別來說明吧,無符號char的範圍是0 255,有符號的char範圍是 128 127。規定是這樣,但是在記...

整型在記憶體中的儲存(原碼 反碼 補碼)

我們談談資料在所開闢記憶體中到底是如何儲存的?比如 int a 20 int b 10 我們知道 a 分配四個位元組的空間。那如何儲存?下面讓我們看三個概念 符號位都是用0表示 正 用1表示 負 原碼 直接將二進位制按照正負數的形式翻譯成二進位制就可以。反碼 將原碼符號位不變,其他位按位取反就可以得...