关于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
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 的程序贴出来看看。