一个整数的范围为:0~64*1024*1024=67108864,表示为整数应是Longint吧?
如何把它转为二进制字符串?用InttoHex只能转为十六进制,并且InttoHex
是作用在Integer上的呀?我现在需要将一个0~64*1024*1024=67108864之间的整数转化为二进制数
(0、1字符串),然后分别抽出该二进制字符串的前面几位和中间几位,再分别转
化为十进制整数,不知道怎么做,求救,谢谢!!!学计算机的兄弟应该知道,当主存地址用二进制表示时,
这前面几位是主存块地址的标识(tag)部分,
中间几位是主存块地址的索引(index)部分,

解决方案 »

  1.   

    在DELPHI中,integer = longint
    你就是要把它分成几段是吧,传换成二进制串就多此一举了。var
      Addr,Part0, Part1, Part2: integer;begin
      Addr := $1111111;  Part0 := Addr shr 20;
      Part1 := (Addr shr 10) and $3FF;
      Part2 := Addr and $3FF;
    end;
      

  2.   

    真不行先转16进制,再每个16进制的string转成4个2进制字符(查表总行吧)。
    用2除总是行的
      

  3.   

    ahjoe(强哥)的做法行吗?
    我看得不太懂,比如主存地址56326985,是不能将563看成标识(tag)部分,将269看成索引(index)部分的,必须把它转化为二进制数,假设为11010100100110101010111011,且假设
    标识(tag)部分占8位,索引(index)部分占6位,则将11010100转为十进制数来对应标识(tag)部分,将100110转为十进制数来对应索引(index)部分,不知道我是不是对你的代码理解有误?
      

  4.   

    我是要得出标识(tag)部分并保存起来以备比较用,
    比如按某个地址访Cache,第一次会失效,这时要放主存,读入块,并把tag保存,下一次再按这个地址访Cache,则通过比较tag会发现有匹配的块(如果这个地址所在的块未被替换掉),不必再访存。总之最好要把地址有十进制转二进制,再转回来,大家说怎么做?
      

  5.   

    如果仅仅作为运算,你可一使用and or xor等直接操作,移位函数有shl,shr;
    如:
    $4567,你想得到$4500,->$4567 and $FF00就可以了,自己试试先。
    delphi的帮助很好用,你在编辑器中点一下and,按F1键就出来了!
      

  6.   

    如果是从0开始,建议定义成cardianl或longword类型;
    var i:Cardinal;
        s:string;
    begin
        i:=67108864;
        s:=IntToBin(i);     //返回32位的'0'或'1'字符串
        while s[1]='0' do   //该循环将前面的没有的0去掉。
        begin
            delete(s,1,1);
        end;
        showmessage(s);    //返回100000000000000000000000000(26个0)
    end;
      

  7.   

    看来很多同志还没有理解内存。
    作为程序员,理解数据在内存中的存储格式是非常重要的。程序无非就是对一些数据做处理并产生输出,如果对数据的存储格式都不能理解,如何能够处理好数据呢?高级语言中的数据在计算中的存储格式全部都是二进制的!在上面的题目中,还有必要把一个integer(就是longint)转换成二进制串吗?完全没有必要。
      

  8.   

    太简单了!取第0位 x and 1
    取第1位 (x and 2) shr 1
    取第2位 (x and 4) shr 2
    取第3位 (x and 8) shr 3
    .....取后1位 x and 1  //2-1
    取后2位 x and 3  //4-1
    取后2位 x and 7  //8-1
    取后4位 x and 15 //16-1
    .....想怎么取就怎么取!
    Easy!!!
      

  9.   

    关于二进制与十进制的转换,有人写了下面两个函数,很好:
    function bintoint(s:string):integer;
    var
      j,i:integer;
    begin
      result:=0;
      if s='' then
      begin
        result:=-1;
        exit;
      end;
      for i:=length(s) downto 1 do
      begin
        j:=1;
        j:=j shl (length(s)-i);
        if s[i]='1' then
          result:=result or j
        else if s[i]='0' then
          result:= result and (not j)
        else
        begin
          result:=-1;
          exit;
        end;
      end;
    end;function inttobin(i:integer;size:integer):string;
    var
     j: integer;
    begin
      result:='';
      for j:=size-1 downto 0 do
      begin
        if i and (1 shl j)<>0 then
          result:=result+'1'
        else
          result:=result+'0';
      end;
    end;关于从字符串中截取字几个符,用Copy就OK了,试一试吧,GoodLuck!