先看程序:
 Dim d1 As Long, d2 As Long
 Randomize Timer
 d1 = Int( Rnd * $7FFFFFFF )
 d2 = Int( Rnd * $7FFFFFFF )问题是: 为什么d1的最后一个字节总是$7F, 而d2的最后一个字节总是$FF?
注: 同样的代码, 在Delphi上就不会出现这种情况

解决方案 »

  1.   

    这该是巧合吧,不信的话你再多运行几次看看,并不总是这样的,不过出现次数是比较多,可能和取整有关系,直接用DOUBLE来取结果就不会这样
      

  2.   

    各位可以运行上面一段程序看一看汗: 上面的程序有点小错误 $7FFFFFFF 应为 &H7FFFFFFF我运行了100次, 100次都是这样的结果按照province_(雍昊)所说: 用Double, 得到的结果不是&H7F, &HFF, 就是&H80, &H00
    正好&H80-1=&H7F, &H00-1=&HFF高手们, 这究竟做何解释?
      

  3.   

    我运行了这段程序,一切正常呀,并没有出现楼主所描述的问题——d1的最后一个字节总是$7F, 而d2的最后一个字节总是$FF。
    源代码如下:
    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建议楼主多试几次看看。
      

  4.   

    DOUBLE会有小数部分,精度和机器有关,你是怎么把他们化为16进制的?
    另外你不能光看最后一个B的内容,因为影响10进制结果最后三位的各个B都有贡献,
      

  5.   

    用Hex$() 转换成16进制关键我需要的就是最后一个字节, 再说了, 它也不能每次都一样啊, 郁闷...Delphi里就不会出现这样的情况
      

  6.   

    Private Sub Command1_Click()
    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