NULLを示すビットパターン

大体アドレス0に意味のあるデータ(割り込みベクタ)があったのにNULLが0だったPC-98時代の時点で既に、NULLが特別視される必然性も何も無い単なる約束事というのは当たり前だった気もするのですが……。
ポインタにNULLが、floatにNaNがあるなら、intにだって無効値があっていいはずで、たとえば0x8000(16bit) = -32768は、同じ型には対応する正の値が入らないため無効値候補と思うんですが、そうはなっていない。単にビット演算の方が重視されたためかなーと。
別に、not nullだのNullableだのD言語の暗黙の初期値だのそんな話をしたいのではなくて、そもそもポインタの特定のビットパターンを無効値とすることに疑問があるわけですよ。例えばintならbool validxxx;だのbool xxxable;を添えておかないといけないケースがポインタだと……ってのはNullableか。
例えば、C言語では配列要素へのポインタは、1要素先のアドレスまで有効ということになっていますが、これと0x0000がNULLというのを組み合わせると、必然的に0xffff(マイナスsizeof(使用する最大のstruct))も使えなくなります。少なくとも配列変数を割り当てることができなくなります。どっかで全メモリアクセスできる型のつもりでtypedef unsigned char (*x)[1 << (sizeof(void *) * 8)];なんて宣言されたらもう使えるアドレスがなくなってしまいますそれ以前にシフト量が整数型のビット数以上なのでこのシフト演算は無効ですgdgd
何が言いたいかといいますとNULLってのはいろいろ崩壊している約束事ですので深く考えるだけ無駄じゃないかとかそういう。