把shortint类型的数字转换成byte或dword

解决方案 »

  1.   

    因为byte和dword都是无符号的整数,所以返回值就是他们的最大值,255和4294967295
      

  2.   

    b:=Byte(s):取了s的低2位,赋值给b。
    d:=DWord(s):取了s的值,赋值给d的低4位,高为填0。
      

  3.   

    对楼上回复!
    b:=Byte(s):取了s的低2位,赋值给b。
    d:=DWord(s):取了s的值,赋值给d的低4位,高为填0。 没细心看,就以为己经解决了这个问题了,就给分了。现在想了一下,疑问丛生!
    s的低2位?2位,是bit还是Byte?s本身只有一个字节大小,它的低2位最多只能表示3这么大的一个数。因此b就应等于3。可是,b的值是255。
    对d:=dword(s),一样的,s的补码为二进制的11111111,即十进制的255。d的低4位,这个4位是四个bit还是4个字节,s的8位值怎么赋给d的低四位吧?就算s的值填到了d的低位,d的高位按回复者所说的填为0,那d的值也只有255。可是d的值为$ffffffff。我改问题为如下过程:
    var s:shortint;
        b:byte;
        d:dword;
    begin
      s:=-1;//变量s的内存地址是-1的补码,11111111.....(8个1)
      b:=byte(-1);//转化成byte类型的整数,这时变量s存放的11111111被当成一个byte类型的变量,即255。
      showmessage(inttostr(b));//显示255
      d:=dword(s);//把s(在内存表现为11111111)转化成dword类型的整数。
      showmessage(inttostr(d));//显示4294967295即二进制的11111111 11111111 11111111 11111111 
      d:=dword(b);//把s(在内丰表现为11111111)转化成dword类型的整数。
      showmessage(inttostr(d));//显示结果为255
    end;
    为什么d:=dword(s)与d:=dword(b)这两个语句中,s与b在内存中都是表现为11111111,而结果却不相同。
    这就是我要问的真正意思!。菜鸟发功,不要笑!
    而如果是s:=shortint(d)或b:=byte(d),我是知道它的过程的,即把d的最低位上的一个字节搬给s或b。