先看程序:
Dim d1 As Long, d2 As Long
Randomize Timer
d1 = Int( Rnd * $7FFFFFFF )
d2 = Int( Rnd * $7FFFFFFF )问题是: 为什么d1的最后一个字节总是$7F, 而d2的最后一个字节总是$FF?
注: 同样的代码, 在Delphi上就不会出现这种情况
Dim d1 As Long, d2 As Long
Randomize Timer
d1 = Int( Rnd * $7FFFFFFF )
d2 = Int( Rnd * $7FFFFFFF )问题是: 为什么d1的最后一个字节总是$7F, 而d2的最后一个字节总是$FF?
注: 同样的代码, 在Delphi上就不会出现这种情况
正好&H80-1=&H7F, &H00-1=&HFF高手们, 这究竟做何解释?
源代码如下:
Option ExplicitPrivate Sub Command1_Click()
Dim d1 As Long, d2 As Long
Randomize Timer
Dim i As Integer
For i = 1 To 100
d1 = Int(Rnd * &H7FFFFFFF)
d2 = Int(Rnd * &H7FFFFFFF)
Text1.Text = Text1.Text & d1 & Space(5) & d2 & vbCrLf
Next iEnd SubPrivate Sub Form_Load()
Text1.Text = ""End Sub
某次运行结果如下:
1062330751 1061141759
1531193983 1808589311
1685109631 1942695679
1911149695 721675263
1028896127 1166688511
125083263 1779140095
558157695 1453257471
1031702655 739624959
1320028543 332088575
1438749311 334801407
622420863 108082943
1008188543 1176120319
2133908863 1184024831
813368959 1788366335
750679935 215087871
285569151 1327566847
212611455 1685114111
1139866239 688288255
1191447423 2102476543
1100457087 2000319487
653264255 502616319
1047752319 72291839
347742079 897516287
1964923007 141973503
801921407 229659903
273834623 1803696639
145798015 485181183
887721087 652524543
2064723327 2016532735
735958655 1202707967
666355583 1696991999
742998143 278241279
244220287 201972991
1164298879 1005060607
1218403199 1237274367
1754100863 1570309119
1645499775 566780159
322584191 1698342399
1412919167 1346835199
419833983 1073670143
527608191 2080204031
229323391 448252415
89129855 139286271
1325620351 1138183167
1652129151 121170175
789096063 762277375
683218815 1264720639
1037373567 254947327
2029572479 436923647
866294399 678531583
1564650367 2098552575
2060141695 572494847
583050623 889417983
1506348671 281949695
1404878719 1257710335
1026947199 380598271
1369504127 1118991615
567018111 630544895
251089791 1821861631
509947007 1626463231
1768541567 1470626047
234583679 534183423
599943039 1669737215
1504239743 251052031
2146115967 1920204031
1655138943 1923293695
2028862335 995323647
206640255 147727359
485815679 1000767743
1713364607 185189887
122294143 1234121471
1974323327 1351092223
2052540799 1171227903
548721279 270199295
430351231 1841919743
923729023 1110731775
1138892159 1300171007
481707647 585534975
215201663 1368537855
331657343 1407406079
1466265983 2034568447
645151359 511488511
262228863 679051007
824108159 1436857343
78726527 431067391
205434495 1475171839
1658806143 1880048383
1450023039 831035391
1301649791 1767150847
1583719039 1581808127
425587583 803440383
755027071 731839487
635596159 1287526655
792270463 983440895
1475151743 965102335
2654335 569892863
862437759 310254847
1393101439 805192191
358390655 1753714431
2100606079 1285768191建议楼主多试几次看看。
另外你不能光看最后一个B的内容,因为影响10进制结果最后三位的各个B都有贡献,
Dim d1 As Long, d2 As Long
Randomize Timer
d1 = Int(Rnd * &H7FFFFFFF)
d2 = Int(Rnd * &H7FFFFFFF)
Cls
Print Hex(d1), Hex(d2)End Sub
全是7F,FF