-3

数字が奇数かどうか知りたいのですが。LSBを比較し、モジュロを使用したくない。

int main(int argc, char*argv[])
{
    if ( argc >1 ) {
        if ( atoi(argv[1]) & 0x1 == 1 ) 
            printf ("odd num \n");
    }
    return 0;
}


# ./odd 2
# ./odd 3
odd num 
# ./odd 22
# ./odd 23
# ./odd 33
odd num 
# ./odd 43
# ./odd 52
odd num 
# file odd
odd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x56f7eb1e7a35762bd8b786eefb5516a14549fc1f, not stripped
4

1 に答える 1

5

あなたは数と数の表現を混同しています。このプログラムへの入力は、22(21の後に続くもの)のような数字ではなく、「22」(10進数の「2」が2回繰り返される)のような数字の表現です。コンパイラに数値のふりをするように指示しても機能しません。

   if ( *(unsigned int*)argv[1] & 0x1 == 1 )

は文字列へのポインタであるためargv[1]、符号なし整数へのポインタのふりをするようにコンパイラに指示すると、ゴミが発生します。

おそらくatoi(argv[1])、10進数形式の数値を表す文字列を、それが表す数値に変換する必要があります。

于 2013-01-16T19:47:01.413 に答える