首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

关于Qbasic的日期有关问题

2012-02-28 
关于Qbasic的日期问题这里,有Msdn中的一段代码,主要是对一个文件的日期进行处理。代码如下:REM Date is ret

关于Qbasic的日期问题
这里,有Msdn中的一段代码,主要是对一个文件的日期进行处理。代码如下:

REM Date is returned in outregs.dx.
REM Day : Bits 0-4
REM Month : Bits 5-8
REM Year : Bits 9-15 (from 1980)
Day = outregs.dx AND 31 ' Mask the upper bits
Month = (outregs.dx \ 2 ^ 5) AND 15 ' Shift L 5 & mask upper bits
Year = 1980 + (outregs.dx \ 2 ^ 9) ' Shift left 9 & add 1980
PRINT "Month ="; Month; " Day ="; Day; " Year ="; Year

这里,我得到了这样转换后的数据 : 2E 43 , 这里应该得到的数据时: 2007.12.14

按照内存布局,我把它转换成 整数是 : 17198 .

再转换成二进制是 : 0100001 1001 01110
根据上面所说的,分成了3组。分别对应的是 年、月、日。

 问题是 如果按照上面的 算法,我得不到我想要的 2007.12.14 。

还有,就是 and 这里的作用! 应该就是取出不同的位置的数据,隐藏更高的位。但我确实是弄不出来。

这里,我主要是分析别人的一个用QBasic编写的软件的数据。其中,它保存了当前数据文件的日期。也就是上面的 2E 43 .

通过其软件也能够输出 2007.12.14 ,其具体的算法我不清楚。查找资料的时候看到了上面的代码,感觉应该是按照这个算法

写的,但是却得不到正确的答案,请哪位给帮忙看看。





[解决办法]
LZ:你以下这句:
Day = outregs.dx AND 31
中的:
outregs.dx
是啥意思?

[解决办法]
我也不理解。。。
[解决办法]
And 运算符还对两个数值表达式中位置相同的位进行逐位比较,并根据下表对 result 中相应的位进行设置:
如果在 expression1 的位为 且在 expression2 中的位为 result 为 
0 0 0 
0 1 0 
1 0 0 
1 1 1


VB code
Private Sub Command1_Click()    Dim strHex As String    Dim intSj As Integer    strHex = "432E"    intSj = CInt("&H" & strHex)    Print intSj    Print intSj And 2 ^ 5 - 1 ' 31 = 2 ^ 5 - 1  (11111)    Print (intSj \ 2 ^ 5) And 2 ^ 4 - 1 ' 15 = 2 ^ 5 - 1  (1111)    Print (1980 - 6) + intSj \ 2 ^ 9 ' 2 ^ 9 = 512End Sub
[解决办法]
这里年是用两位数字表示的,所以你得到数据2E 43并不正确2007.12.14,正确的答案是37 8E(14222)
11011 1100 01110
27 12 14

1980+27=2007
反相
2007-1980=27
(27)10=(11011)2

[解决办法]
outregs.dx 的值是如何得到的?

没有 Qbasic ,但我在 Quick BASIC 中试了一下。
outregs.dx 的值是 0。

[解决办法]
这么讨论是没有什么意义的,把你得到2E 43 的程序贴出来看看。

热点排行