From: Takashi Nakai Date: 1998-07-01T16:53:59+09:00 Subject: [ruby-dev:3174] Re: bignum of ruby11b9_28 こんにちは、中井と申します。 一連の内容をあまり理解していないので、見当違いなことを言っている かもしれないことを、お断りしておきます。 ^^;) ------------------------------------------------------- In message "[ruby-dev:3165] Re: bignum of ruby11b9_28", WATANABE Hirofumi wrote... >わたなべです. > >定数はコンパイル時で変数は実行時だからそのあたりでバグってる >可能性はありますね. >つーわけで, 一度変数に入れて検出してみるのどうでしょう? >int x = -1; >(x >> 1) == -1 が真か否か. > >これだと最適化されて定数になるかもしれないか. うーむ. ------------------------------------------------------- と言うことですが、INRIA の Objective CAML の configure の中に 次の様な記述がありました、今回問題になっている符号ではなくて endian の検査ですが参考にならないでしょうか? configure (218-230) ......................................................... sh ./runtest endian.c case $? in 0) echo "This is a big-endian architecture." echo "#define ARCH_BIG_ENDIAN" >> m.h;; 1) echo "This is a little-endian architecture." echo "#undef ARCH_BIG_ENDIAN" >> m.h;; 2) echo "This architecture seems to be neither big endian nor little endian." echo "Objective Caml won't run on this architecture." exit 2;; *) echo "Something went wrong during endianness determination." echo "You'll have to figure out endianness yourself" echo "(option ARCH_BIG_ENDIAN in m.h).";; esac ......................................................... endian.c ......................................................... #include "m.h" #ifndef ARCH_SIXTYFOUR /* 64bit machine ? */ long intval = 0x41424344L; char * bigendian = "ABCD"; char * littleendian = "DCBA"; #else long intval = 0x4142434445464748L; char * bigendian = "ABCDEFGH"; char * littleendian = "HGFEDCBA"; #endif main(void) { long n[2]; char * p; n[0] = intval; n[1] = 0; p = (char *) n; if (strcmp(p, bigendian) == 0) exit(0); if (strcmp(p, littleendian) == 0) exit(1); exit(2); } ......................................................... お騒がせしました。 ---- Takashi Nakai nakai@m1.sys.to.casio.co.jp