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次方吗!!!!!
纯手打,楼主给分吧!!!!!! 不懂追问!!!