c語言中記憶體單元的位址是用什麼進製表示的

2025-07-21 15:45:06 字數 3486 閱讀 1239

1樓:網友

你寫的時候是用十六進位,從0000h到ffffh,但是這個只是位址儲存編號,實際上的位址要加偏移量修正。比如2000h,偏移量160h,則位址為20000h+160h=20160h,。因為定址是16位的,但實際上可到20位。

不過無論什麼操作,到機器上都會變成二進位。十六進位是為了在寫程式時方便你的書寫和換算。

2樓:網友

用什麼進製表示還不都一樣……進位只是給人看看的,無論裡寫什麼進位,計算機肚子裡還不都是二進位……

在8086/8088cpu系統中每個儲存單元的位址有哪些表示方法?它們之間的關係是什麼

3樓:匿名使用者

邏輯位址即是思維性的表示,由於8086的暫存器最大為16位,因此位址在暫存器中按16位大小存放,由段位址和偏移位址聯合表示的位址型別叫邏輯位址,例如2000h:1000h,這裡的2000h表示段的起始位址,即段位址,而1000h則表示偏移位址,表示邏輯位址時總是書寫成段位址:偏移位址。

實體地址即是真實存在的唯一位址,是指的記憶體中各個單元的單元號,由8086有20條位址線,因此可定址2的20次方,按2進位位表示規則,即有20位,這個就是實體地址。實體地址因為超過了暫存器大小(16位)因此無法直接存放,需要合成,公式為實體地址=段位址×10h+偏移位址,公式中的資料可從邏輯位址獲得。

邏輯位址是16位的,因此範圍是2的16次方,即64k.

實體地址是20位的,因此範圍是2的20次方,即1m.

怎麼理解 【記憶體單元】和【記憶體位址】

4樓:網友

記憶體單元是計算機儲存資料的最小單位,以位元組計數計算機在使用儲存器時,要給這些儲存器進行編號,這個編號就是位址位址最小的就是位元組位址。

但有時資料不是以位元組形式進行讀寫的,比如int型就是連續的4個位元組組成,計算機就使用位址附加說明的方式來訪問資料,一次讀寫就是4個位元組。

這些位址連續編號,就形成一整片位址區,位址順序增大,最小單位是位元組,這個連續編號就是所謂線性位址。

記憶體位址就是記憶體單元的編號,方便訪問讀寫用的。

用c語言直接輸出記憶體中資料(二進位或十六進位)

5樓:麥香甜甜圈

記憶體中的資料顯然是以二進位形式存放的。

c語言用格式符控制輸出內容的進位及格式,例如%d是十進位格式,%o是八進位格式,%x是十六進位格式,但唯獨沒有二進位的輸入輸出格式符。因此也就無法將記憶體單元中的二進位**原樣輸出出來。

p格式符用來輸出變數在記憶體中的位址是個十六進位數。想用%p輸出變數i的位址可以,但是無法輸出變數i的值。

總結:在c語言中想輸出某個記憶體單元具體的**值是無法實現的。可以用window自帶的ms-dos系統下的debug程式檢視(有點複雜的)。

6樓:網友

c不支援二進位輸出,只有八進位,十進位和十六進位三種形式,你可以用十六進位,方法是printf("%x",i);

首先這段**就是錯的。沒有%p這種形式存在,另外它也不是輸出i,而是j,還有怎麼多出來乙個花括號?

c語言 記憶體位址值屬於什麼資料型別

7樓:千鋒教育

記憶體位址值屬於無符號的整型。

記憶體位址指系統 ram 中的特定位置,通常以十六進位的數字表示。

在8086的真實模式下,把某一段暫存器左移4位,然後與位址addr相加後被直接送到記憶體匯流排上,這個相加後的位址就是記憶體單元的實體地址,而程式中的這個位址就叫邏輯位址(或叫虛位址)。在80386的保護模式下,這個邏輯位址不是被直接送到記憶體匯流排,而是被送到記憶體管理單元(mmu)。mmu由乙個或一組晶元組成,其功能是把邏輯位址對映為實體地址,即進行位址轉換。

8樓:oo芸小沐

每個不同的資料型別佔有不同的記憶體空間。位址,是你定義的哪個變數或者常量。

9樓:網友

記憶體位址是4個位元組的整型資料。

10樓:網友

無符號的整型, 你想輸出可以用%p控制符。

c語言中每個儲存單元是幾個位元組,它由幾個二進位位構成

11樓:金色潛鳥

計算機儲存單元以位元組(byte)為單位,乙個位元組 由 8個 字元(bit),也就是 8個 二進位位 構成。

乙個 int , float, double ..需幾個位元組存放,可以用 sizeof(int), sizeof(float), sizeof(double) .計算。

例如:printf("int --d bytes",sizeof(int) )

printf("float --d bytes",sizeof(float) )

12樓:網友

每個儲存單元? 一般程式語言都是按位元組來說的,一位元組8個位元位。

13樓:

是按位元組儲存的,一位元組8個位元位。

c語言的進位是怎麼表示的?

14樓:網友

十進位a = 99;

十六進位。a = 0x99;

八進位a = 0143;

二進位沒有,一般用十六進位代替,從後面數,4位轉化成十六進位的1位0110 0011

a = 0x63;

15樓:景曉靈

你的意思是不是 輸入乙個十進位的數 把他轉換成其他進位的數啊~~就是printf("%d,%o,%x");就分別輸出十進位 八進位 十進位。

要輸出二進位的話就要下面的**了:

#include

void f(int n)

int main()

return 0;}

★c語言輸出位址的16進位是怎樣算的?

16樓:網友

int i, j;

int *p = i;

printf("%p", p); //output: 0x0000ffc0

由此可知i的位址是0x0000ffc0,那麼j的位址就是0x0000ffc0+sizeof(int)=0x0000ffc4

就這麼一直算下去。

輸出格式你使用了%x,這是16進位輸出的表示,計算機獲知p是指標,指向a,輸出時便將a的位址以16進位格式輸出。

要理解的話,可以這樣:

printf("%x", p);

long int_p = (long)p;

printf("%x", int_p);

編譯器將p轉換為了long型,然後以16進位輸出。

一般輸出指標的值時,是以%p格式輸出的,其值與%x輸出沒有差異。

17樓:前後左左

x就是輸出十六進位數把。

18樓:網友

要*p,單個p是位址,這個是位址,作業系統自己分配的。

C語言中,為什麼每個變數只佔據記憶體單元

static是靜態變數,在程式中的生命週期是最長的,在程式執行中一直存在。extern是外部變數內,這個變數在程式外部定容義,也是始終存在的。而auto和retister都是在程式執行到這裡時申請記憶體單元,用完後隨即就釋放了。砍侃看說得好啊 我也學了好長時間c了,不知道有此一說啊.誰說的,我怎麼不...

C語言中ascii碼錶有什麼用,C語言中ASCII碼值是什麼意思

計算機中,所有的資料在儲存和運算時都要使用二進位制數表示 因為計算機用高電平和低電平分別表示1和0 例如,象a b c d這樣的52個字母 包括大寫 以及0 1等數字還有一些常用的符號 例如 等 在計算機中儲存時也要使用二進位制數來表示,而具體用哪些二進位制數字表示哪個符號,當然每個人都可以約定自己...

c語言中IP位址的型別轉換

你要知道你平常用的ip位址存入計算機並不是點分形式的,是uint型別的,當你需要取得這個點分形式的ip位址,你需要呼叫inte ntoa,他的引數是in addr,你要知道in addr不是乙個基本型別,它是乙個結構體,裡面有個成員,你把他的值設成那個uint型別的ip,再呼叫inet ntoa,算...