这里,有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 ,其具体的算法我不清楚。查找资料的时候看到了上面的代码,感觉应该是按照这个算法写的,但是却得不到正确的答案,请哪位给帮忙看看。
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 ,其具体的算法我不清楚。查找资料的时候看到了上面的代码,感觉应该是按照这个算法写的,但是却得不到正确的答案,请哪位给帮忙看看。
Day = outregs.dx AND 31
中的:
outregs.dx
是啥意思?
如果在 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 = 512
End Sub
outregs.dx 的值是 0。