[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:7362] Re: 整数のビット数



On 7/14/06, KOSEKI Yoshinori 小関 吉則 <kose@xxxxxxxxxxx> wrote:
> VALBITS が 29 なら signed intager を 29 bit にしてるように思
> えるのだけど。(何故に compiler で変わる?)

compilerで変わる理由はわかった。

gcc の場合は lisp.h:372 の
#define XINT(a) (((EMACS_INT) (a)) >> GCTYPEBITS)
が使われるけど、msvc の場合は lisp.h:406の
#define XINT(a) ((((EMACS_INT) (a)) << (BITS_PER_EMACS_INT - VALBITS))	\
		 >> (BITS_PER_EMACS_INT - VALBITS))
が使われるからですね。
前者はVALBITSによらないけど、後者はVALBITSが少ないと最上位ビットが
つぶされてしまう。なので、msvcでは28bitになってしまう。

なのでやはりVALBITSの定義が正しくないことが根本原因ですね。

-- Shun-ichi GOTO