在数据类型后面的括号内加上一个数,表示什么样的操作?
在数据类型后面的括号内加上一个数,表示什么样的操作?
楼主dedema(思想恐龙)2001-11-18 20:13:48 在 Delphi / VCL组件开发及应用 提问 var s:shortint;
b:byte;
d:dword;
begin
s:=-1;
b:=byte(s);
d:=dword(s);//具体的过程怎么样?
showmessage(inttostr(b)+" "+inttostr(d));
end;
欢迎指教! 问题点数:50、回复次数:5Top
1 楼cobi(我是小新)回复于 2001-11-18 20:37:13 得分 10
把shortint类型的数字转换成byte或dwordTop
2 楼cobi(我是小新)回复于 2001-11-18 20:45:56 得分 10
因为byte和dword都是无符号的整数,所以返回值就是他们的最大值,255和4294967295Top
3 楼dedema(思想恐龙)回复于 2001-11-18 21:23:19 得分 0
好。谢 谢!
不过,还不够的!
我是问转化时对内存的处理过程!Top
4 楼gzmhero(hihihi)回复于 2001-11-23 16:00:58 得分 30
b:=Byte(s):取了s的低2位,赋值给b。
d:=DWord(s):取了s的值,赋值给d的低4位,高为填0。Top
5 楼dedema(思想恐龙)回复于 2001-11-24 10:45:07 得分 0
对楼上回复!
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。
Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
