数组A中,每个元素A[i, j]的长度均为32个二进制[1]位,行下标从-1~9,列下标从1~11。从首地址S开始连续存放在主存储器[2]中,主存储器字长为16位。求:①存放该数组所需多少单元?②存放数组第4列所有元素至少需多少单元?③数组按行存放时,元素A[7, 4]的起始地址是多少?④数组按列存放时,元素A[4, 7]的起始地址是多少?
数组A中,每个元素A[i, j]的长度均为32个二进制[1]位,行下标从-1~9,列下标从1~11。从首地址S开始连续存放在主存储器[2]中,主存储器字长为16位。求:
①存放该数组所需多少单元?
②存放数组第4列所有元素至少需多少单元?
③数组按行存放时,元素A[7, 4]的起始地址是多少?
④数组按列存放时,元素A[4, 7]的起始地址是多少?
题目解答
答案
1. 存放该数组所需多少单元?
数组的行数为10,列数为11,每个元素的长度为32位。由于主存储器字长为16位,一个存储单元可以容纳两个字长。因此,每个元素占用
。总的存储单元数为 10 × 11 × 2 = 220。
2. 存放数组第4列所有元素至少需多少单元?
数组的行数为10,第4列有10个元素,每个元素占用2个存储单元。所以,存放数组第4列所有元素至少需要 10 × 2 = 20 个存储单元。
3. 数组按行存放时,元素A[7, 4]的起始地址是多少?
按行存放时,行下标从-1到9,列下标从1到11,所以元素A[7, 4]的起始地址可以计算如下:
起始地址 = S + (7 - (-1)) × 11 + (4 - 1) × 2
起始地址 = S + 88 + 6 = S + 94
4. 数组按列存放时,元素A[4, 7]的起始地址是多少?
按列存放时,行下标从-1到9,列下标从1到11,所以元素A[4, 7]的起始地址可以计算如下:
起始地址 = S + (4 - (-1)) × 11 × 2 + (7 - 1) × 2
起始地址 = S + 110 + 12 = S + 122
综上所述,
① 存放该数组所需的单元数为220个。
② 存放数组第4列所有元素至少需要20个单元。
③ 数组按行存放时,元素A[7, 4]的起始地址是S + 94。
④ 数组按列存放时,元素A[4, 7]的起始地址是S + 122。
解析
数组的行数为10(从-1到9),列数为11(从1到11),每个元素的长度为32位。由于主存储器字长为16位,一个存储单元可以容纳两个字长。因此,每个元素占用$\dfrac {32}{16}=2$ 个存储单元。总的存储单元数为 10 × 11 × 2 = 220。
步骤 2:计算存放数组第4列所有元素所需的存储单元数
数组的行数为10,第4列有10个元素,每个元素占用2个存储单元。所以,存放数组第4列所有元素至少需要 10 × 2 = 20 个存储单元。
步骤 3:计算数组按行存放时,元素A[7, 4]的起始地址
按行存放时,行下标从-1到9,列下标从1到11,所以元素A[7, 4]的起始地址可以计算如下:
起始地址 = S + (7 - (-1)) × 11 + (4 - 1) × 2
起始地址 = S + 88 + 6 = S + 94
步骤 4:计算数组按列存放时,元素A[4, 7]的起始地址
按列存放时,行下标从-1到9,列下标从1到11,所以元素A[4, 7]的起始地址可以计算如下:
起始地址 = S + (4 - (-1)) × 11 × 2 + (7 - 1) × 2
起始地址 = S + 110 + 12 = S + 122