A simple, perhaps incomplete, way of looking at this is that Nil = Nothing (VB), or Null (C#), where zero ( 0 ) is in fact greater than nothing, to use your example.
A "less simple"
"more complete way"
http://en.wikipedia.org/wiki/Null_pointer#Null_pointerSo in C/C++ a NULL is some constant integer value which is defined as a memory address which is impossible to be used. At least in most implementations of C/C++. This is probably why non-lispers think of nil as having some sort of value constant.
In Lisp, nil is the "base" symbol ... it's equivalent to an empty list. In AutoLisp it IS actually an empty list:
(= nil '()) ;returns T
And True/False is also implemented differently in other languages. E.g. in VB False = 0, and True = -1 ... that's because of the way computers store signed integers (at least in the case of VB's computers that is). E.g. a 8-bit 0 is stored as a bit-array of 00000000, while the usual method of denoting a negative uses
2's compliment, which means -1 is stored as 11111111 ... see why these 2 values were chosen as False and True respectively?
@HyflyingBird: Consider this, (+/-)1.#inf is actually undefined and simply used as an indication that the double float has reached one of its limits. It has no value of it's own - thus it evaluates to nil when used (as lisp interprets -1.#inf as a symbol name, which doesn't contain a value, and thus it's value IS nil):
(+ -1.#inf)
; error: bad argument type: numberp: nil
(= nil -1.#inf)
T
(< nil (* -1e200 1e200))
T
I.e. nil is considered "smaller than anything else" in Lisp ... but it's not necessarily designed that way, it's more likely just a function of the implementation of the lisp interpreter/compiler.