Memory 什么';一组字符在PASCAL中的表示是什么?

Memory 什么';一组字符在PASCAL中的表示是什么?,memory,char,set,pascal,data-representation,Memory,Char,Set,Pascal,Data Representation,他们要求我将一组类似字符的内容重新表示为“映射内存”。剧组里有什么角色?老师告诉我们使用ASCII码,将其转换为一组32字节 A有这个例子,集合{'A','B','C'} (7来自0111) ={00 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00 00}pascal中的集合可以在内存中表示,每个元素一位;如果位为1,则元素存在于集合中 “字符集”是ascii字符集,其中每个元素都有一个从0到255的序数值(ascii的序数值应该是127,但此集合通常扩

他们要求我将一组类似字符的内容重新表示为“映射内存”。剧组里有什么角色?老师告诉我们使用ASCII码,将其转换为一组32字节

A有这个例子,集合{'A','B','C'}

(7来自0111)

={00 00 00 00 70 00 00 00 00 00 00 00 00 00 00 00
00}

pascal中的集合可以在内存中表示,每个元素一位;如果位为1,则元素存在于集合中

“字符集”是ascii字符集,其中每个元素都有一个从0到255的序数值(ascii的序数值应该是127,但此集合通常扩展到一个字节,因此有256个不同的字符)

因此,“字符集”在内存中表示为32字节的块,总共包含256位。字符“A”(大写A)的序数值为65。65除以8的整数(一个字节可以容纳的位数)得到8。因此,表示集合中“A”的位位于字节号8中。65 mod 8给出1,这是该字节中的第二位

字节号8的字符A的第二位为ON(第三位为B,第四位为C)。所有这三个字符一起给出0000.1110($0E十六进制)的二进制表示形式

为了演示这一点,我使用turbo pascal尝试了以下程序:

var
  ms    : set of char;
  p     : array[0..31] of byte absolute ms;
  i     : integer;

begin
  ms := ['A'..'C'];
  for i := 0 to 31 do begin
    if i mod 8=0 then writeln;
    write(i,'=',p[i],'  ');
  end;
  writeln;
end.
由于使用了“绝对”关键字,程序将打印集合中所有32个字节的值。其他版本的pascal可以使用不同的方法来实现。运行该程序会得到以下结果:

0=0  1=0  2=0  3=0  4=0  5=0  6=0  7=0  
8=14  9=0  10=0  11=0  12=0  13=0  14=0  15=0  
16=0  17=0  18=0  19=0  20=0  21=0  22=0  23=0  
24=0  25=0  26=0  27=0  28=0  29=0  30=0  31=0  
您可以看到,唯一不同于0的字节是字节号8,它包含14($0E十六进制,0000.1110)。所以,你的猜测(70)是错误的


也就是说,我必须补充一点,没有人能说这总是正确的,因为pascal中的集合依赖于实现;所以你的答案也可能是正确的。turbo pascal(在dos/windows上)使用的表示法是最符合逻辑的,但这并不排除其他可能的表示法。

pascal中的集合可以在内存中表示,每个元素一位;如果位为1,则元素存在于集合中

“字符集”是ascii字符集,其中每个元素都有一个从0到255的序数值(ascii的序数值应该是127,但此集合通常扩展到一个字节,因此有256个不同的字符)

因此,“字符集”在内存中表示为32字节的块,总共包含256位。字符“A”(大写A)的序数值为65。65除以8的整数(一个字节可以容纳的位数)得到8。因此,表示集合中“A”的位位于字节号8中。65 mod 8给出1,这是该字节中的第二位

字节号8的字符A的第二位为ON(第三位为B,第四位为C)。所有这三个字符一起给出0000.1110($0E十六进制)的二进制表示形式

为了演示这一点,我使用turbo pascal尝试了以下程序:

var
  ms    : set of char;
  p     : array[0..31] of byte absolute ms;
  i     : integer;

begin
  ms := ['A'..'C'];
  for i := 0 to 31 do begin
    if i mod 8=0 then writeln;
    write(i,'=',p[i],'  ');
  end;
  writeln;
end.
由于使用了“绝对”关键字,程序将打印集合中所有32个字节的值。其他版本的pascal可以使用不同的方法来实现。运行该程序会得到以下结果:

0=0  1=0  2=0  3=0  4=0  5=0  6=0  7=0  
8=14  9=0  10=0  11=0  12=0  13=0  14=0  15=0  
16=0  17=0  18=0  19=0  20=0  21=0  22=0  23=0  
24=0  25=0  26=0  27=0  28=0  29=0  30=0  31=0  
您可以看到,唯一不同于0的字节是字节号8,它包含14($0E十六进制,0000.1110)。所以,你的猜测(70)是错误的


也就是说,我必须补充一点,没有人能说这总是正确的,因为pascal中的集合依赖于实现;所以你的答案也可能是正确的。turbo pascal(在dos/windows上)使用的表示法是最符合逻辑的,但这并不排除其他可能的表示法。

为什么要对这个问题进行否决?怎么了?为什么否决这个问题?发生了什么?