Office中国论坛/Access中国论坛

标题: 【讨论】有趣的Access VBA数字之迷 [打印本页]

作者: LucasLynn    时间: 2005-8-14 17:38
标题: 【讨论】有趣的Access VBA数字之迷
下面有一个表达式:

((CLng(Not cByte(255)) * 256 + (Not cByte(255))) * 256 + (Not cByte(255))) * 256 + (Not cByte(155))

你可以用任何方法来求一下他的值。我求出来是100

然后你再尝试在这个表达式前面加上“1-”和“1+”,变成:

1-((CLng(Not cByte(255)) * 256 + (Not cByte(255))) * 256 + (Not cByte(255))) * 256 + (Not cByte(155))

1+((CLng(Not cByte(255)) * 256 + (Not cByte(255))) * 256 + (Not cByte(255))) * 256 + (Not cByte(155))

再分别求值。呵呵,你是不是彻底崩溃了?

[此贴子已经被作者于2005-9-21 23:04:35编辑过]


作者: LucasLynn    时间: 2005-8-14 17:43
其实只是个小把戏,嘿嘿。
作者: eyewitnes    时间: 2005-8-14 17:44
不用去试算,,看着就感觉晕
作者: LucasLynn    时间: 2005-8-14 17:58
以下是引用eyewitnes在2005-8-14 9:44:00的发言:

不用去试算,,看着就感觉晕



9494,你看都激起民愤了,赶快做完吧。

[em01]
作者: 海狸先生    时间: 2005-8-14 19:02
本来就是帮你想的,这种东西你在行
作者: eyewitnes    时间: 2005-8-14 19:28
以下是引用LucasLynn在2005-8-14 9:58:00的发言:







9494,你看都激起民愤了,赶快做完吧。

[em01]



呃,不试算了,我猜应该是32768和-32768之类的结果,嘿嘿
作者: LucasLynn    时间: 2005-8-14 19:40
以下是引用eyewitnes在2005-8-14 11:28:00的发言:





呃,不试算了,我猜应该是32768和-32768之类的结果,嘿嘿



完全不是,你用VBA算一下就知道了。我说了是小把戏,就不会这么复杂的嘛。

[em01]
作者: LyxSoft    时间: 2005-8-15 03:13
1+0+100=1011-0+100=101
作者: wu8313    时间: 2005-8-15 04:15
给出的两个表达式的值 均为101

1+(0+0+0+100)=101

1-(0+0+0+100)=101

奇怪的就是: 这两个表达式的值应该不一样。

计算倒是很快,再一奇怪楼主是如何得到上述表达式的?

-----------------------------------------------------------------------------------------------------------------

我是在 立即窗口 中查看结果的:

Sub wu8313()

Dim a, b, c,d

b = Not CByte(255)

c = CLng(Not CByte(255))

d = Not CByte(155)

'LucasLynn 给出的表达式之一

a = 1 + ((CLng(Not CByte(255)) * 256 + (Not CByte(255))) * 256 + (Not CByte(255))) * 256 + (Not CByte(155))

Debug.Print b  '值为0

Debug.Print c  '值为0

Debug.Print d  '值为100

Debug.Print a  '值为101  最终结果

End Sub

--------------------------------------------------------------------------------------------------------------





[此贴子已经被作者于2005-8-14 20:42:45编辑过]


作者: LucasLynn    时间: 2005-8-15 17:38
以下是引用LyxSoft在2005-8-14 19:13:00的发言:



1+0+100=101

1-0+100=101





终于有人道破天机了。

[em05]
作者: wu8313    时间: 2005-8-16 01:56
我怎么感觉是这样的:给出的两个表达式的值 均为101 1+(0+0+0+100)=101 '表达式之一1-(0+0+0+100)=101 '表达式之二----------------------------------------------------------------还请赐教!谢谢!
作者: LucasLynn    时间: 2005-8-16 16:19
以下是引用wu8313在2005-8-15 17:56:00的发言:



我怎么感觉是这样的:

给出的两个表达式的值 均为101

1+(0+0+0+100)=101 '表达式之一

1-(0+0+0+100)=101 '表达式之二

----------------------------------------------------------------

还请赐教!谢谢!



[em05],障眼法而已,以后写代码要小心哦,这类问题会害死人的。
作者: wu8313    时间: 2005-8-17 02:02
的确是 够障眼的。 括号的层次很多,我没有分的很清楚。就开始胡乱的使用 立即 来查看。问题的关键就是有好几个零值,即使我把括号分错,也不影响最终结果。 看来四则运算又得学学了。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3