1. 為什麼存儲器的容量是以2的冪來計算的
這是由電子元件的特性所決定的。
電腦裡面採用二進制進行信息的存儲或傳輸,這是因為電子元件具有「通」或「斷」兩種狀態,可以用來表示0和1,用0和1組合出來的二進制數值就可以用來儲存信息、進行運算了。
使用1個電子元件記錄的一個數字稱為一個「位(bit)」,8個「位」稱為1個「位元組(Byte)」,此外還有1k=1024,1M=1024k,1G=1024M等關系。
在電路的設計上,分為控制器和存儲器兩個部分,如果解釋為什麼以2的冪來確定容量,就應該從控制器角度進行說明:
我們進行資料存儲的時候,首先需要把存儲的內容轉換成二進制的形式,這就會得到一個足夠「長」的數字,需要用控制器去判斷每個存儲器的元件上面的狀態。
前面說了電路結構可以實現0和1兩種狀態,同樣,控制器也是通過這種方式來管理存儲器,應該不難理解,一個控制器可以分別以0、1兩種狀態去管理兩個存儲器,兩個控制器就可以實現00、01、10、11四個狀態管理四個存儲器,三個控制器可以得到000、001、010、011、100、101、110、111八個狀態……
依此類推,每增加一個控制器,可以管理的存儲器數量就可以加倍,存儲容量同時加倍。
那麼返回來計算,假設你需要的是1B的容量,需要8個「bit」,就是8個存儲器,可以以3個控制器進行管理,在電路設計上,這樣的「8+3」構成了一組完整的存儲單元。
後面就容易解釋了,無論何種情況,以1B為起點,只要增加一個控制器,就可以把對容量的管理提升一倍,因此從電路設計上就出現了1B、2B、4B、8B、16B……1024B這樣以2位倍數的有規律的容量標准。
繼續遞增,1024B=1KB,增加控制器就出現2KB、4KB、8KB……1024KB(1MB)。
當然,之後就會是1MB、2MB、4MB、8MB……1GB。
相信你已經理解了,容量以2的倍數遞增,主要是因為每增加一個控制器就會使可管理的容量加倍。
順便Free一個小知識:我們所說的「32位」、「64位」的CPU也是因為需要進行計算的時候能夠一次性管理更「長」(也就是更大)的數據,而需要的控制器的提升。
2. 存儲單元的地址的基本定義
單元地址:單元地址簡稱地址,在存儲器中每個存儲單元都有唯一的地址編號,稱為單元地址。
在計算機中最小的信息單位是bit,也就是一個二進制位,8個bit組成一個Byte,也就是位元組。一個存儲單元可以存儲一個位元組,也就是8個二進制位。計算機的存儲器容量是以位元組為最小單位來計算的,對於一個有128個存儲單元的存儲器,可以說它的容量為128位元組。
(2)a的存儲單元為什麼是2擴展閱讀:
一般應具有存儲數據和讀寫數據的功能,以8位二進製作為一個存儲單元,也就是一個位元組。每個單元有一個地址,是一個整數編碼,可以表示為二進制整數。
程序中的變數和主存儲器的存儲單元相對應。變數的名字對應著存儲單元的地址,變數內容對應著單元所存儲的數據。存儲地址一般用十六進制數表示,而每一個存儲器地址中又存放著一組二進制(或十六進制)表示的數,通常稱為該地址的內容。
3. 存儲單元為什麼從0開始存儲數據
應該是起源於數組之類連續存儲結構的設計
類似數組int a[]
數組名a代表的是這個數組的存儲空間地址
如果需要讀取第一個數據,就是直接讀取該地址起始的一個int大小的內容。
如果需要讀取第二個元素,就是讀取該地址其實,偏移1個int大小的內容
所以a[2]裡面的2實際上是位移值。
真正編程的時候實際上是用
a + 2 * sizeof(int) 來確定數據的地址
綜上所述,所以使用0開始計數。
4. int a=-2;變數a在內存中的存儲形式是
額 你理解錯了 。 跟本就不存在a的ASCII碼值。
這樣看:定義了一個變數,給它取個名字叫a,這個名字是給你程序員看的,計算機跟本不看這個a,a對計算機來說只是一個標識,它標識著在內存中所佔用的一個大小為4B的內存空間,並且!這4B的空間存放一個整數,其值為2. 而在存儲的時候是這樣存的
由於內存的最小單位是位元組,也就是1B是最小的單位,而一個int類型的數據在32的系統中要佔用32位大小, 換算一個 8位=1位元組 即8bit=1B 那麼32位=4位元組。 這個2轉換成二進制數是10 ,但計算機要求用32位的數來存放這個2 ,咋辦? 補0唄。在哪補? 肯定不能在後邊補啊,那就變成別的數了—— 那,那就在前補。
所以是00000000 00000000 00000000 00000010
以上便是2這個數在計算機內存中的形式, 每8位一組分成4組剛好是4B大小,所以內存中就有連著的4個內存單元 來存放這個數值2. 而這一內存單元我們把它叫做a, 計算機也正是通過這個名字來標識這個數。
綜上,總結一下,a這個字母是給程序員看的, 計算機不認識a這字母,a在計算機中僅僅是轉換為一個計算機用於標識這個數值2的其它的什麼東西。 具體是什麼東西你不必要了解,其實我也不知道。而這個2在內存中存放的形式是佔用4個內存單元的空間。
樓主想更深入了解這方面,建議把C語言學一遍後學學匯編語言就很清楚了
5. 數據在內存中的存儲方式
額 你理解錯了 。 跟本就不存在a的ASCII碼值。
這樣看:定義了一個變數,給它取個名字叫a,這個名字是給你程序員看的,計算機跟本不看這個a,a對計算機來說只是一個標識,它標識著在內存中所佔用的一個大小為4B的內存空間,並且!這4B的空間存放一個整數,其值為2. 而在存儲的時候是這樣存的
由於內存的最小單位是位元組,也就是1B是最小的單位,而一個int類型的數據在32的系統中要佔用32位大小, 換算一個 8位=1位元組 即8bit=1B 那麼32位=4位元組。 這個2轉換成二進制數是10 ,但計算機要求用32位的數來存放這個2 ,咋辦? 補0唄。在哪補? 肯定不能在後邊補啊,那就變成別的數了—— 那,那就在前補。
所以是00000000 00000000 00000000 00000010
以上便是2這個數在計算機內存中的形式, 每8位一組分成4組剛好是4B大小,所以內存中就有連著的4個內存單元 來存放這個數值2. 而這一內存單元我們把它叫做a, 計算機也正是通過這個名字來標識這個數。
綜上,總結一下,a這個字母是給程序員看的, 計算機不認識a這字母,a在計算機中僅僅是轉換為一個計算機用於標識這個數值2的其它的什麼東西。 具體是什麼東西你不必要了解,其實我也不知道。而這個2在內存中存放的形式是佔用4個內存單元的空間。
樓主想更深入了解這方面,建議把C語言學一遍後學學匯編語言就很清楚了
6. 二維數組A按行順序存儲,其中每個元素佔2個存儲單元。
顯然A[5][5]的地址為476。方法1:可以看規律,A[3][3]比A[1][1]多了兩行零兩列,而A[5][5]比A[3][3]也是這樣,所以448+(448-420)=476.方法2:直接求! 答案選:D
7. 請教變數數據在內存中的存儲方式,比如int a=2,那麼在內存中是怎麼存儲的呢
額 你理解錯了 。 跟本就不存在a的ASCII碼值。
這樣看:定義了一個變數,給它取個名字叫a,這個名字是給你程序員看的,計算機跟本不看這個a,a對計算機來說只是一個標識,它標識著在內存中所佔用的一個大小為4B的內存空間,並且!這4B的空間存放一個整數,其值為2. 而在存儲的時候是這樣存的
由於內存的最小單位是位元組,也就是1B是最小的單位,而一個int類型的數據在32的系統中要佔用32位大小, 換算一個 8位=1位元組 即8bit=1B 那麼32位=4位元組。 這個2轉換成二進制數是10 ,但計算機要求用32位的數來存放這個2 ,咋辦? 補0唄。在哪補? 肯定不能在後邊補啊,那就變成別的數了—— 那,那就在前補。
所以是00000000 00000000 00000000 00000010
以上便是2這個數在計算機內存中的形式, 每8位一組分成4組剛好是4B大小,所以內存中就有連著的4個內存單元 來存放這個數值2. 而這一內存單元我們把它叫做a, 計算機也正是通過這個名字來標識這個數。
綜上,總結一下,a這個字母是給程序員看的, 計算機不認識a這字母,a在計算機中僅僅是轉換為一個計算機用於標識這個數值2的其它的什麼東西。 具體是什麼東西你不必要了解,其實我也不知道。而這個2在內存中存放的形式是佔用4個內存單元的空間。
樓主想更深入了解這方面,建議把C語言學一遍後學學匯編語言就很清楚了
8. 一個計算機組成原理的問題:存儲器地址寄存器(MAR)是4位,為什麼它的存儲單元個數就是2^4=16個了呢如圖
樓主你可以這么理解:比如MAR有4位,也就是說它可以儲存4個二進制位。一個二進制位要麼是0,要麼是1 ,就這兩種選擇!
也就是說,比如4個二進制位組成的二進制數的所有可能性是不是:0000 0001...直到1111.。。。算一下,是不是 每一位兩種可能,2x2x2x2=16,不就是2的4次方嗎!!!!!
純手打,樓主給分吧!!!!!! 不懂追問!!!